C# 如何制作文本框和组合框';当某个依赖项属性设置为True时,s ToggleBox是否同样闪烁?

C# 如何制作文本框和组合框';当某个依赖项属性设置为True时,s ToggleBox是否同样闪烁?,c#,wpf,xaml,C#,Wpf,Xaml,我有一个文本框和一个组合框。每当某个依赖项属性BlinkDepProp设置为true时,我希望它们都闪烁: <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- ... -->

我有一个
文本框
和一个
组合框
。每当某个依赖项属性
BlinkDepProp
设置为
true
时,我希望它们都闪烁:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <!-- 
        ...
    -->
    <TextBox Text="{Binding MyDataContext.SomeText, UpdateSourceTrigger=PropertyChanged}" Grid.Row="0">
        <TextBox.Style>
            <Style>
                <Style.Triggers>
                    <DataTrigger
                        Binding="{Binding Path=BlinkDepProp, 
                                  RelativeSource={RelativeSource FindAncestor, 
                                                  AncestorType={x:Type loc:DevicesRepositoryEditorUserControl}}}"
                        Value="True">
                        <DataTrigger.EnterActions>
                            <BeginStoryboard Name="BlinkBeginStoryboard">
                                <Storyboard>
                                    <ColorAnimation To="Red" Storyboard.TargetProperty="(TextBox.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>
        </TextBox.Style>
    </TextBox>
    <!-- 
        ...
    -->
    <ComboBox ItemsSource="{Binding MyDataContext.SomeList}" Template="{DynamicResource ComboBoxControlTemplate}"
              SelectedValue="{Binding MyDataContext.SelectedEntry}"
              Grid.Row="1">
    <!-- 
        ...
    -->
</Grid>

上面的代码片段适用于
TextBox
元素,但我想将其应用于
ComboBox
ToggleButton
。我创建了
ComboBoxControlTemplate
ControlTemplate
(这并不重要,但它位于一个单独的
XAML
文件中的一些
ResourceDictionary
中)

我的问题是:如何触发
文本框
组合框
以相同的方式动作(相同的颜色、相同的闪烁率和相位,…),并对相同的
BlinkDepProp
(在包含
用户控件
中定义)做出响应?

到底什么不起作用? 在我的小示例中,textbox和combobox正在闪烁

<Window x:Class="animation.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style x:Key="blink">
            <Style.Triggers>
                <DataTrigger
                        Binding="{Binding BlinkDepProp}" 
                        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>
    </Window.Resources>
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <TextBox 
            Name="txt"
            Text="{Binding SomeText, UpdateSourceTrigger=PropertyChanged}" 
            Style="{StaticResource ResourceKey=blink}"
            Background="Beige"
            Width="100" 
            Height="20"/>
        <ComboBox 
            Name="cmb"
            Style="{StaticResource ResourceKey=blink}"
            Background="Beige"
            Width="100" 
            Height="20"
            Grid.Column="1"/>
    </Grid>
</Window>

您可以尝试将
组合框的背景设置为与
文本框的背景绑定,当
数据触发器
按如下方式触发时:

 <ComboBox ItemsSource="{Binding MyDataContext.SomeList}" 
           Template="{DynamicResource ComboBoxControlTemplate}"
          SelectedValue="{Binding MyDataContext.SelectedEntry}"
          Grid.Row="1">
   <ComboBox.Style>
       <Style TargetType="ComboBox">
          <Style.Triggers>
             <DataTrigger Binding="{Binding Path=BlinkDepProp, 
                                            RelativeSource={RelativeSource 
                                     AncestorType={x:Type loc:DevicesRepositoryEditorUserControl}}}" Value="True">
                 <Setter Property="Background" Value="{Binding Background, ElementName=tb}"/>
             </DataTrigger>
          </Style.Triggers>
       </Style>
   </ComboBox.Style>
 </ComboBox>


我想你的文本框的
Name
tb

你的组合框在哪里?它在可视树中的相对位置(相对于文本框)对于解决此问题很重要。@KingKing-这并不重要,它们在
XAML
树中都有一些公共节点(不是单独的文件)。但仅举一个例子,我更新了我的问题,使它们都位于相同的
网格中。