如何 'Disable' WPF 用户控件?
How to 'Disable' a WPF UserControl?
我有一个 UserControl,当 'IsEnabled' 为 false 时我需要更改它的外观。我知道这是非常基本的 WPF 样式,但我似乎无法将各个部分组合在一起。我假设我需要创建一个样式,并为“属性="IsEnabled" Value="False" 添加一个触发器。但是我应该把样式定义放在哪里?(?)我如何应用它?...在 UserControl 或 Parent window 中?我的触发器是否需要在 Setter 元素内?样式是否需要应用于UserControl 还是它的 children?我不知道还有什么问题需要问!
如果您觉得这与另一个问题重复,请告诉我。
如果您知道有关 WPF 样式的简单好教程可以回答我的问题,我将不胜感激。
我的代码如下所示:
<UserControl x:Class="UserControls.UCDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UserControls"
mc:Ignorable="d"
d:DesignHeight="240" d:DesignWidth="200">
<UserControl.Resources>
</UserControl.Resources>
<Grid Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="5*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="{Binding BG}" >
<Ellipse Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" Fill="DeepSkyBlue" />
</Grid>
<Grid Grid.Row="1" Background="Tomato" />
</Grid>
<uc:UCDemo x:Name="Demo" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="300,100,0,0" Width="80" Height="100" Style="{StaticResource uc:DemoStyle}"
Visibility="{Binding LightVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource BooleanToVisibilityConverter}}" />
感谢您的帮助!
这取决于当 IsEnabled
为 false 时外观应该如何变化。
带有 Trigger
的简单样式可以直接分配给 UserControl 的 Style
属性。下面的只是将 Opacity
设置为 0.5.
<UserControl ...>
<UserControl.Style>
<Style TargetType="UserControl">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
<Grid Background="Transparent">
...
</Grid>
</UserControl>
我不确定我明白你的问题是什么。但是为了改变一个控件的 IsEnabled
属性 ,依赖于其他控件是:
假设必须更改其 IsEnabled
的控件是 A,而 A 所依赖的控件是 B。
首先,为 B 选择一个名称:x:Name = "AccessCheckBox"
。
然后为控件 B 编写这样的绑定:
< ... IsEnabled = {Binding ElementName = "AccessCheckBox", Path="IsChecked".../>
完成。我希望我明白你的意思。
我有一个 UserControl,当 'IsEnabled' 为 false 时我需要更改它的外观。我知道这是非常基本的 WPF 样式,但我似乎无法将各个部分组合在一起。我假设我需要创建一个样式,并为“属性="IsEnabled" Value="False" 添加一个触发器。但是我应该把样式定义放在哪里?(
如果您觉得这与另一个问题重复,请告诉我。 如果您知道有关 WPF 样式的简单好教程可以回答我的问题,我将不胜感激。
我的代码如下所示:
<UserControl x:Class="UserControls.UCDemo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UserControls"
mc:Ignorable="d"
d:DesignHeight="240" d:DesignWidth="200">
<UserControl.Resources>
</UserControl.Resources>
<Grid Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="5*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Background="{Binding BG}" >
<Ellipse Grid.Row="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" Fill="DeepSkyBlue" />
</Grid>
<Grid Grid.Row="1" Background="Tomato" />
</Grid>
<uc:UCDemo x:Name="Demo" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="300,100,0,0" Width="80" Height="100" Style="{StaticResource uc:DemoStyle}"
Visibility="{Binding LightVisible, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Converter={StaticResource BooleanToVisibilityConverter}}" />
感谢您的帮助!
这取决于当 IsEnabled
为 false 时外观应该如何变化。
带有 Trigger
的简单样式可以直接分配给 UserControl 的 Style
属性。下面的只是将 Opacity
设置为 0.5.
<UserControl ...>
<UserControl.Style>
<Style TargetType="UserControl">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.5"/>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
<Grid Background="Transparent">
...
</Grid>
</UserControl>
我不确定我明白你的问题是什么。但是为了改变一个控件的 IsEnabled
属性 ,依赖于其他控件是:
假设必须更改其 IsEnabled
的控件是 A,而 A 所依赖的控件是 B。
首先,为 B 选择一个名称:x:Name = "AccessCheckBox"
。
然后为控件 B 编写这样的绑定:
< ... IsEnabled = {Binding ElementName = "AccessCheckBox", Path="IsChecked".../>
完成。我希望我明白你的意思。