wpf - 通过 Binding 在运行时更改 WPF 控件样式
问题描述
对于我正在开发的游戏,代码需要(在运行时)更改按钮的样式。基本上,按钮代表(象棋类)游戏中的一个单元格,单元格的属性(背景、前景或图像)代表单元格的状态(捕获、损坏、敌人等)。
应用程序计算按钮的样式名称,并根据单元格的状态将按钮的 DataContext 设置为“StateA”、“StateB”、“StateC”或“StateD”。
我尝试了几种替代方法来定义 bt 按钮样式。没有工作(见下文)。
定义在运行时从控件的多个预定义样式中选择样式的正确方法是什么?
<Button Content="Button" Style="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Button_Click" />
<Button Content="Button" Style="{DynamicResource {Binding}}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Button_Click" />
风格部分:
<Window x:Class="WpfApp2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp2"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<Style x:Key="StateA" >
<Setter Property="TextBlock.Background" Value="blue" />
</Style>
<Style x:Key="StateB" >
<Setter Property="TextBlock.Background" Value="yellow" />
</Style>
<Style x:Key="StateC" >
<Setter Property="TextBlock.Background" Value="green" />
</Style>
</Window.Resources>
<Grid>
<Button Name="foo" Content="{Binding}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Click="Button_Click" Style="{DynamicResource {Binding}}" />
</Grid>
</Window>
解决方案
使用绑定到您的或源属性的单个Style
with :DataTriggers
DataContext
<Window.Resources>
<Style x:Key="ButtonStyle" TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="StateA">
<Setter Property="TextBlock.Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="StateB">
<Setter Property="TextBlock.Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding}" Value="StateC">
<Setter Property="TextBlock.Foreground" Value="Green" />
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<Button Name="foo" Content="{Binding}" HorizontalAlignment="Center"
VerticalAlignment="Center" Width="75"
Click="Button_Click" Style="{StaticResource ButtonStyle}" />
</Grid>
推荐阅读
- c# - 在 QC 复选框列表 Unity 上添加分数
- sql - 在 ADODB.Connection 中使用“NOT IN”选择
- recharts - Recharts 自定义 X 轴
- ios - 如何将tableview的索引访问到下一个vc
- embedded - stm32即使没有写入也会擦除闪存吗?
- kubernetes - 使用应用程序负载均衡器 | 舵图 | AWS
- c - 使用带参数的 perror
- python-3.6 - Django 2.0 到 2.2 升级 centos7
- database - 如何按计数或等式过滤(Azure)Edm.String 集合?
- node.js - nodejs electronjs sqlite3 - 使用未声明的标识符'napi_is_detached_arraybuffer'