c# - 在运行时根据枚举值更改边框背景
问题描述
我正在设计一个自定义控件,我希望用户能够使用自定义属性更改背景颜色。背景颜色应由名为 Severity 的枚举指定:
代码
public enum Severity
{
Warning,
Information,
Success,
Error
}
Xaml
<Border Background="{DynamicResource InfoBarInformationalSeverityBackgroundBrush}"
CornerRadius="4">
<Grid Margin="10">
<TextBlock Text="{Binding Title,
RelativeSource={RelativeSource AncestorType=ib:InfoBar}}"/>
</Grid>
</Border>
<InfoBar Severity="Error"/>
我尝试了触发器,但它似乎不起作用
更新:
Xaml
<Border>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Severity,
RelativeSource={RelativeSource AncestorType=ib:InfoBar}}"
Value="Error">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Severity,
RelativeSource={RelativeSource AncestorType=ib:InfoBar}}"
Value="Success">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
代码
public Severity Severity
{
get { return (Severity) GetValue(SeverityProperty); }
set { SetValue(SeverityProperty, value); }
}
public static readonly DependencyProperty SeverityProperty =
DependencyProperty.Register("Severity", typeof(Brushes), typeof(InfoBar));
解决方案
依赖属性应注册为 aSeverity
而不是Brushes
:
public static readonly DependencyProperty SeverityProperty =
DependencyProperty.Register(nameof(Severity), typeof(Severity), typeof(InfoBar));
然后假设是控件Border
的可视子项,您的示例应该可以工作:InfoBar
<b:InfoBar Severity="Warning">
<Border>
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding Severity, RelativeSource={RelativeSource AncestorType=b:InfoBar}}" Value="Warning">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Severity, RelativeSource={RelativeSource AncestorType=b:InfoBar}}" Value="Success">
<Setter Property="Background" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBlock Text="{Binding Severity, RelativeSource={RelativeSource AncestorType=b:InfoBar}}" />
</Border>
</StackPanel>
</b:InfoBar>
推荐阅读
- powershell - 无法将输出格式化为 CSV
- java - 这些是什么以及它们编译的原因:“class Tst
" 和 " 类 Tst2 {}”? - git - 为什么 git 不给我任何冲突?
- reactjs - 反应redux reducer将对象添加到对象中的数组
- shell - 错误选项 -t shell 集成 bash
- kubernetes-helm - 在 kubernetes 上运行 eclipse/che 本地映像
- c# - .editorconfig 命名约定不起作用
- laravel - 多重关系
- javascript - ReactJS - 是否可以调整 scrollIntoView 的功能以适应我页面导航的需要?
- c# - 添加 Ref 或 Out 关键字让我出现错误“Argument 1 may not be pass with Ref KeyWord”,这导致我的程序停止工作