将可见性 属性 用于多个用户控件 wpf
using the visibility property for multiple usercontrol wpf
我有一个场景,我需要根据它们的可见性显示多个用户控件 属性 并在单击下一个按钮时显示下一个可见控件。我已经在堆栈面板中添加了所有用户控件,这似乎不是一个好主意,我认为它确实会影响应用程序的性能。有人可以帮助我指导什么是定义这种情况的最佳方式。
<StackPanel Grid.Row="3" Grid.Column="0" Margin="4 4 28 0" ScrollViewer.CanContentScroll="True">
<Border BorderThickness="3" BorderBrush="LightGray" >
<StackPanel>
<controls:ICUC x:Name="ICU" BorderBrush="CadetBlue" Visibility="{Binding Visibilityicuc}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:J1939 x:Name="J1939eng" BorderBrush="CadetBlue" Visibility="{Binding Visibilityj1939}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:p_code x:Name="pcodengg" BorderBrush="CadetBlue" Visibility="{Binding Visibilitypcode}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:Diagnostic_Developer x:Name="diagdev" BorderBrush="CadetBlue" Visibility="{Binding Visibilitysgdd}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="Auto" Width="Auto"/>
</StackPanel>
</Border>
</StackPanel>
最近刚在工作中实施了完全相同的事情。这是您的代码的改编版本,希望对您有所帮助。
视图模型:
public class ExampleClass
{
private int section { get; set; }
public Visibility Visibilityicuc { get; set; } //presume first section
public Visibility Visibilityj1939 { get; set; } //presume second section
public Visibility Visibilitypcode { get; set; } //presume third section
public Visibility Visibilitysgdd { get; set; } //presume fourth section
public DelegateCommand NextButtonDelegateCommand { get; set; }
public ExampleClass()
{
NextButtonDelegateCommand = new DelegateCommand(Next);
section = 1; //indicates in first section
}
private void SetSectionVisibility(int currSection)
{
if (currSection == 1) // if first section
{
Visibilityicuc = Visibility.Visible; //section 1
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Hidden;
}
else if (currSection == 2)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Visible; //section 2
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Hidden;
}
else if (currSection == 3)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Visible; //section 3
Visibilitysgdd = Visibility.Hidden;
}
else if (section == 4)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Visible; //section 4
}
}
private void Next()
{
if (section == 1)
SetSectionVisibility(2); //move to next section
else if (section == 2)
SetSectionVisibility(3);
else if (section == 3)
SetSectionVisibility(4);
//else if (section == 4)
//end! special event? unsure
}
}
我还会对您当前的 XAML 代码做一些细微的更新,以确保其正常工作!
也就是说,确保您的绑定采用以下格式:
Visibility="{Binding Visibilityicuc, Mode=TwoWay, Fallbackvalue=Visibility.Hidden}"
通过设置项目的默认状态,它将不可见(显然使第 1 部分 Visibility.Visible,而不是隐藏!)。如果您也熟悉 PropertyChanged 事件,我建议您使用它们在特定部分的可见性发生变化时通知您的视图。如果您不熟悉,请回复,我将为您提供代码的实施示例。
谢谢!希望这对您有所帮助
我有一个场景,我需要根据它们的可见性显示多个用户控件 属性 并在单击下一个按钮时显示下一个可见控件。我已经在堆栈面板中添加了所有用户控件,这似乎不是一个好主意,我认为它确实会影响应用程序的性能。有人可以帮助我指导什么是定义这种情况的最佳方式。
<StackPanel Grid.Row="3" Grid.Column="0" Margin="4 4 28 0" ScrollViewer.CanContentScroll="True">
<Border BorderThickness="3" BorderBrush="LightGray" >
<StackPanel>
<controls:ICUC x:Name="ICU" BorderBrush="CadetBlue" Visibility="{Binding Visibilityicuc}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:J1939 x:Name="J1939eng" BorderBrush="CadetBlue" Visibility="{Binding Visibilityj1939}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:p_code x:Name="pcodengg" BorderBrush="CadetBlue" Visibility="{Binding Visibilitypcode}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="210" />
<controls:Diagnostic_Developer x:Name="diagdev" BorderBrush="CadetBlue" Visibility="{Binding Visibilitysgdd}" ScrollViewer.VerticalScrollBarVisibility="Visible" Foreground="Black" VerticalAlignment="Center" Height="Auto" Width="Auto"/>
</StackPanel>
</Border>
</StackPanel>
最近刚在工作中实施了完全相同的事情。这是您的代码的改编版本,希望对您有所帮助。
视图模型:
public class ExampleClass
{
private int section { get; set; }
public Visibility Visibilityicuc { get; set; } //presume first section
public Visibility Visibilityj1939 { get; set; } //presume second section
public Visibility Visibilitypcode { get; set; } //presume third section
public Visibility Visibilitysgdd { get; set; } //presume fourth section
public DelegateCommand NextButtonDelegateCommand { get; set; }
public ExampleClass()
{
NextButtonDelegateCommand = new DelegateCommand(Next);
section = 1; //indicates in first section
}
private void SetSectionVisibility(int currSection)
{
if (currSection == 1) // if first section
{
Visibilityicuc = Visibility.Visible; //section 1
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Hidden;
}
else if (currSection == 2)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Visible; //section 2
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Hidden;
}
else if (currSection == 3)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Visible; //section 3
Visibilitysgdd = Visibility.Hidden;
}
else if (section == 4)
{
Visibilityicuc = Visibility.Hidden;
Visibilityj1939 = Visibility.Hidden;
Visibilitypcode = Visibility.Hidden;
Visibilitysgdd = Visibility.Visible; //section 4
}
}
private void Next()
{
if (section == 1)
SetSectionVisibility(2); //move to next section
else if (section == 2)
SetSectionVisibility(3);
else if (section == 3)
SetSectionVisibility(4);
//else if (section == 4)
//end! special event? unsure
}
}
我还会对您当前的 XAML 代码做一些细微的更新,以确保其正常工作! 也就是说,确保您的绑定采用以下格式:
Visibility="{Binding Visibilityicuc, Mode=TwoWay, Fallbackvalue=Visibility.Hidden}"
通过设置项目的默认状态,它将不可见(显然使第 1 部分 Visibility.Visible,而不是隐藏!)。如果您也熟悉 PropertyChanged 事件,我建议您使用它们在特定部分的可见性发生变化时通知您的视图。如果您不熟悉,请回复,我将为您提供代码的实施示例。
谢谢!希望这对您有所帮助