【问题标题】:How to reuse style with two different bindings?如何使用两种不同的绑定重用样式?
【发布时间】:2014-10-27 08:58:34
【问题描述】:

我有这个Style

<Style x:Key="BlinkStyle">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=BlinkForError, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type loc:DevicesRepositoryEditorUserControl}}}"
                     Value="True">
            <DataTrigger.EnterActions>
                <BeginStoryboard Name="BlinkBeginStoryboard">
                    <Storyboard>
                        <ColorAnimation To="Red" Storyboard.TargetProperty="(Background).(SolidColorBrush.Color)"
                                                        FillBehavior="Stop" Duration="0:0:0.4" RepeatBehavior="Forever" AutoReverse="True" />
                    </Storyboard>
                </BeginStoryboard>
            </DataTrigger.EnterActions>
            <DataTrigger.ExitActions>
                <StopStoryboard BeginStoryboardName="BlinkBeginStoryboard" />
            </DataTrigger.ExitActions>
        </DataTrigger>
    </Style.Triggers>
</Style>

只要绑定的依赖属性BlinkForError 设置为True,它就会开始闪烁。效果很好,像这样:

<!-- When BlinkForError set to True, this TextBox, named "One", blinks: -->
<TextBox Name="One" Style="{StaticResource ResourceKey=BlinkStyle}"/>

事情是我想要完全相同的东西,但绑定到另一个依赖属性,比如AnotherBlinkForError

<!-- When AnotherBlinkForError set to True, this TextBox, named "Two", blinks: -->
<TextBox Name="Two" Style="{StaticResource ResourceKey=AnotherBlinkStyle}"/>

我可以复制整个样式,只更改DataTriggerBinding 部分。

有没有办法避免这种重复,使用两个不同的绑定重复使用相同的 Style 两次?

【问题讨论】:

    标签: c# wpf xaml binding wpf-style


    【解决方案1】:

    您可以尝试使用TextBoxes 上的Tag 属性并将它们绑定到BlinkForErrorBlinkForAnotherError。在您的样式定义中,绑定将检查 Tag 值(您可能必须使用 RelativeSourceFindAncestor 选项)而不是 Blink 属性。

    但老实说,如果只有两个 TextBoxes 和各自的错误属性,我会选择两种不同的样式,因为这样更方便。

    【讨论】:

    • &lt;DataTrigger Binding="{RelativeSource={RelativeSource Mode=Self}, Path=Tag}}" Value="True" /&gt; 呢?
    猜你喜欢
    • 1970-01-01
    • 2011-08-23
    • 2015-08-03
    • 1970-01-01
    • 2023-03-12
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    相关资源
    最近更新 更多