gpt4 book ai didi

c# - 如何根据 wpf (mvvm) 中的 bool 值切换边框样式

转载 作者:行者123 更新时间:2023-12-03 10:55:10 24 4
gpt4 key购买 nike

所以这是我在 xaml 中的边界(的一部分)

    <DataTemplate DataType="{x:Type viewModel:FunctionProviderViewModel}">
<Border Margin="4"
Background="PapayaWhip"
CornerRadius="4"
IsEnabled="{Binding IsSimpleModeActive}"
Style="{StaticResource ResourceKey=AcpBorder}">

我用这个 DataTemplate 填充一个控件。我用 x:Key="SimpleAcpBorder" 添加了另一个边框我在我的 View 模型中添加了一个 bool 值(它将绑定(bind)到一个复选框)。现在,如果选中复选框,我想将样式设置为简单,否则设置为常规样式。有谁知道如何实现这一目标?

提前致谢!

编辑:

我的数据模板现在看起来像这样
    <DataTemplate DataType="{x:Type viewModel:FunctionProviderViewModel}">
<Border Background="PapayaWhip">
<Border.Style>
<Style TargetType="Border"
BasedOn="{StaticResource ResourceKey=AcpBorder}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSimpleModeActive}"
Value="True">
<Setter Property="Margin"
Value="0" />
<Setter Property="CornerRadius"
Value="0" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>

<Border.Effect>
<DropShadowEffect BlurRadius="10" ShadowDepth="5" />
</Border.Effect>
<TreeViewItem VerticalContentAlignment="Center"
Background="Transparent"

在另一个 xaml 中,我的 AcpBoarder 保持不变:
    <Style x:Key="AcpBorder"
TargetType="Border">
<Setter Property="VerticalAlignment"
Value="Stretch" />
<Setter Property="CornerRadius"
Value="3" />
<Setter Property="Padding"
Value="4" />
<Setter Property="Margin"
Value="2" />
</Style>

但不知何故,触发器似乎对我不起作用。有任何想法吗?

非常感谢你

编辑2:

System.Windows.Data 警告:56:为绑定(bind) (hash=28450086) 创建了 BindingExpression (hash=54724182)
System.Windows.Data 警告:58:路径:'IsSimpleModeActive'
System.Windows.Data 警告:60:BindingExpression (hash=54724182):默认模式解析为 OneWay
System.Windows.Data 警告:61:BindingExpression (hash=54724182):默认更新触发器解析为 PropertyChanged
System.Windows.Data 警告:62:BindingExpression (hash=54724182):附加到 System.Windows.Controls.Border.NoTarget (hash=22755592)
System.Windows.Data 警告:67:BindingExpression (hash=54724182):解析源
System.Windows.Data 警告:70:BindingExpression (hash=54724182):找到数据上下文元素:Border (hash=22755592) (OK)
System.Windows.Data 警告:78:BindingExpression (hash=54724182):使用根项 FunctionProviderViewModel (hash=3473742) 激活
System.Windows.Data 警告:107:BindingExpression (hash=54724182):在级别 0 使用 FunctionProviderViewModel.IsSimpleModeActive 的缓存访问器:RuntimePropertyInfo(IsSimpleModeActive)
System.Windows.Data 警告:104:BindingExpression (hash=54724182):使用访问器 RuntimePropertyInfo(IsSimpleModeActive) 将级别 0 的项目替换为 FunctionProviderViewModel (hash=3473742)
System.Windows.Data 警告:101:BindingExpression (hash=54724182):使用 RuntimePropertyInfo(IsSimpleModeActive) 从 FunctionProviderViewModel (hash=3473742) 获取级别 0 的值:'False'
System.Windows.Data 警告:80:BindingExpression (hash=54724182):TransferValue - 得到原始值“假”
System.Windows.Data 警告:89:BindingExpression (hash=54724182):TransferValue - 使用最终值“False”
线程 '' (0x454) 以代码 0 (0x0) 退出。

最佳答案

您可以使用 DataTrigger为了这。但是,您不能申请 DataTrigger直接到你的边界。相反,您必须将其应用于 Style .

从评论看来,您使用的样式 AcpBorder在许多地方,您不想在此样式和名为 IsSimpleModeActive 的 View 模型属性之间创建耦合。 .一种方法是设置 Border.Style直接属性并让样式基于AcpBorder风格:

<Border Margin="4" Background="PapayaWhip" CornerRadius="4" IsEnabled="False">
<Border.Style>
<Style TargetType="Border" BasedOn="{StaticResource AcpBorder}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSimpleModeActive}" Value="True">
<Setter Property="IsEnabled" Value="True"/>

... more setters

</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>

关于c# - 如何根据 wpf (mvvm) 中的 bool 值切换边框样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com