WPF 做一个指示灯
XAML:
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal">
<Ellipse Width="40" Height="40" VerticalAlignment="Center">
<Ellipse.Style>
<Style TargetType="Ellipse">
<Style.Triggers>
<DataTrigger Binding="{Binding PresentColor}" Value="True">
<Setter Property="Shape.Fill" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding PresentColor}" Value="False">
<Setter Property="Shape.Fill" Value="Gray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Ellipse.Style>
</Ellipse>
<local:HButton Content="更改颜色" Height="30" Width="80" Margin="10 0 0 0" x:Name="clk" Command="{Binding ChangeColorCommand}"/>
</StackPanel>
注意:不要再在<Ellipse/>
里面设定 Fill 属性,因为这样会把样式中的 Fill 属性覆盖掉。
ViewModel:
private bool _presentColor = false;
public bool PresentColor
{
get { return _presentColor; }
set { _presentColor = value; RaisePropertyChanged(nameof(PresentColor)); }
}
private RelayCommand _changeCommand = null;
public RelayCommand ChangeColorCommand
{
get
{
if (_changeCommand == null)
{
_changeCommand = new RelayCommand(ChangeColor);
}
return _changeCommand;
}
set
{
_changeCommand = value;
}
}
private void ChangeColor()
{
PresentColor = !PresentColor;
}
点击按钮,圆型颜色在灰色和红色切换:
如何让按钮颜色一起更改呢?
XAML 中按钮背景颜色绑定 ViewModel 中的一个颜色值。
XAML 中更改:
<local:HButton Content="更改颜色" Background="{Binding ColorForBtn}" Height="30" Width="80" Margin="10 0 0 0" x:Name="clk" Command="{Binding ChangeColorCommand}"/>
ViewModel 中增加/更改:
private SolidColorBrush _colorForBtn = new SolidColorBrush(Colors.Gray);
public SolidColorBrush ColorForBtn
{
get { return _colorForBtn; }
set { _colorForBtn = value; RaisePropertyChanged(nameof(ColorForBtn)); }
}
private void ChangeColor()
{
PresentColor = !PresentColor;
if (PresentColor)
{
ColorForBtn = new SolidColorBrush(Colors.Red);
}
else
{
ColorForBtn = new SolidColorBrush(Colors.Gray);
}
}
其实,也可以用 DataTrigger 触发器做,像上面的 Ellipse 一样,绑定到 PresentColor 这个属性上去。这样转换的逻辑在界面完成,不用单独多写后台代码逻辑。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库