【问题标题】:How can I apply a conditional effect to a button based on value in the ViewModel?如何根据 ViewModel 中的值将条件效果应用于按钮?
【发布时间】:2017-03-07 17:29:17
【问题描述】:

我可以使用以下方法轻松地为按钮添加一点发光效果:

<Button ...>
  <Button.Effect>
    <DropShadowEffect ... />
  </Button.Effect>
</Button>

如何根据 ViewModel 中的值有条件地应用效果?

基本上,如果最近几天添加了新文档,我希望按钮“发光”。我可以提供 bool 值,指示是否需要发光作为 ViewModel 的属性。

我正在考虑创建两个附加到同一命令的按钮,根据 ViewModel 隐藏一个并显示另一个。这会起作用,但它似乎有点强迫。

想法?

谢谢。

J

【问题讨论】:

    标签: wpf user-interface button effects dropshadoweffect


    【解决方案1】:

    您需要使用 DataTrigger 为您的 Button 创建一个样式,如下所示:

    <Button Content="Hello" Command="{Binding HelloCommand}">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SomeCondition}" Value="True">
                        <Setter Property="Effect">
                            <Setter.Value>
                                <DropShadowEffect />
                            </Setter.Value>
                        </Setter>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
    

    请注意,SomeCondition 是视图模型中的布尔属性。只有当SomeConditiontrue 时,才会应用效果。

    【讨论】:

    • 啊...是的,当然!出于某种原因,我不认为 Effect 只是一个可设置的属性......谢谢。
    • 很高兴我能帮上忙。如果这个答案解决了您的问题,请mark it as the accepted answer。谢谢。
    【解决方案2】:

    我认为你真的需要DataTrigger Like 下面,

    <Style.Triggers>
        <DataTrigger Binding="{Binding PropertyFromViewModel}" Value="True">
          <Setter .../>
          <Setter .../>
       </DataTrigger>
    </Style.Triggers>
    

    例子

        <Button Content="Hello" Command={Binding YourCommand}>
            <Button.Style>
                <Style TargetType="{x:Type Button}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Glow}" Value="True">
                            <Setter Property="Effect">
                                <Setter.Value>
                                    <DropShadowEffect Color="Blue"/>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    

    【讨论】:

    • 这应该是公认的答案。如果没有“”,您将获得 System.Windows.Markup.XamlParseException。
    猜你喜欢
    • 2023-04-11
    • 2017-09-23
    • 2019-02-27
    • 2021-01-06
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多