WPF:更改用户控件中元素的颜色(如果"IsEnabled=False")



我有一个用户控件,它由一个包含 3 列的网格组成:

Name="Test">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid Width="{StaticResource DoubleOverallWidthUserControls}" Height="{StaticResource DoubleHeightControls}">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="{StaticResource GridLengthUserControlLabel}" />
<ColumnDefinition Width="{StaticResource GridLengthUserControlContent}" />
<ColumnDefinition Width="{StaticResource GridLengthUserControlUnits}" />
</Grid.ColumnDefinitions>
<Border
Grid.Row="0"
Grid.Column="0"
BorderBrush="{StaticResource BrushTextInputBorder}"
BorderThickness="0,0,0,1"
Cursor="Arrow">
<TextBlock
x:Name="TextBlockLabel"
Width="{StaticResource DoubleWidthUserControlLabel}"
VerticalAlignment="Center"
DockPanel.Dock="Top"
TextAlignment="Left" />
</Border>
<Border BorderBrush="{StaticResource BrushBorder}" CornerRadius="3,3,0,0" Grid.Row="0"
Grid.Column="1" Background="White">
<TextBox
x:Name="TextBoxText"
Width="{StaticResource DoubleWidthUserControlContent}" />
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Test, Path=IsEnabled}" Value="False">
<Setter Property="Background" Value="Gray"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<TextBlock
x:Name="TextBlockUnit"
Grid.Row="0"
Grid.Column="2"
Width="{StaticResource DoubleWidthUserControlUnits}"
Margin="10,0,0,0"
VerticalAlignment="Center" />
</Grid>

现在,如果禁用控件,我想更改控件中的以下内容:

  • 第 1 列:网格底部边框颜色
  • 第 2 列:换行透明文本框的白色边框元素的背景色

有人可以帮助我吗?

样式资源库仅在未直接设置属性时才有效。这是因为直接赋值会创建一个所谓的局部值,该值的优先级高于样式资源调配器中的值。有关详细信息,请参阅依赖项属性值优先级。

由于要禁用两个边框,因此可以在资源中创建以下样式:

<UserControl.Resources>
<Style x:Key="BorderStyle" TargetType="Border">
<Setter Property="Background" Value="White"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=Test, Path=IsEnabled}"
Value="False">
<Setter Property="Background" Value="Gray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>

将此样式指定给边框。

<Border Style="{StaticResource BorderStyle}"/>

您甚至可以通过省略x:Key

<UserControl.Resources>
<Style TargetType="Border">
...
</Style>
</UserControl.Resources>

这样,如果按钮:

<Border>
...
</Border>

相关内容

最新更新