我正在创建一个 Wpf 浏览器应用程序,它对不同的页面有多个控件。每个页面都遵循相同的模式,如下所示:
在每个页面加载事件中,用户都可以看到两个组合框。当用户在 中选择任何值时,所有combobox
控件(如button
, )对用户都是可见的。label
textbox
我想编写一个通用类/函数来隐藏控件,以便我可以在整个应用程序中使用。有什么办法可以做到吗?
我正在创建一个 Wpf 浏览器应用程序,它对不同的页面有多个控件。每个页面都遵循相同的模式,如下所示:
在每个页面加载事件中,用户都可以看到两个组合框。当用户在 中选择任何值时,所有combobox
控件(如button
, )对用户都是可见的。label
textbox
我想编写一个通用类/函数来隐藏控件,以便我可以在整个应用程序中使用。有什么办法可以做到吗?
解决方案1:
在每个页面中,您都可以像这样添加一个触发器来隐藏/显示控件 -
<ComboBox Height="22" Name="comboBox1" />
<Grid>
<Grid.Style>
<Style TargetType="{x:Type Grid}">
<Setter Property="Visibility" Value="Visible"></Setter>
<Style.Triggers>
<DataTrigger
Binding="{Binding ElementName=comboBox1, Path=SelectedItem}"
Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
<Grid.Style>
<!-- Your controls; TextBox, Buttons etc. -->
</Grid>
解决方案2:
如果你想要更复杂的逻辑(比如基于两个组合框,那么你可以创建一个MultiValueConverter
并在上面的 XAML 中使用它来设置Visibility
网格。
如果在多个窗口中重复使用它,您可以创建一个样式并将其应用于所有窗口中的网格。
解决方案3:
按照道德逻辑的建议创建一个通用的 ViewModel。
如果您使用 ViewModel 方法,则不需要Visibility
属性,只需SelectedItem
在触发器或转换器中使用该属性即可;即使您想创建一个单独的属性,我建议您将其设为Boolean
类型并在 XAML 中使用它。
您可以在所有三种情况下创建一个通用样式并在所有窗口中重复使用该样式。
在您的 ViewModelBase 类中,创建一个 Type 的属性(例如 SelectedItem),作为您的 ComboBox 绑定到的列表的属性。并将此属性绑定到 ComboBox 的选定项。创建类型 Visibility 的另一个属性(例如 ControlVisibilty )并将其绑定到所有控件(您要根据 ComboBox 选定项更改其可见性) Visiblity 属性。现在在 SelectedItem 属性的 Setter 中根据您的逻辑设置 ControlVisibilty 的值。您可以对另一个组合框执行相同的操作。我希望这有助于您了解。