使用SourcName触发其他元素

时间:2013-08-18 09:09:29

标签: wpf triggers storyboard datatrigger

我想通过文本框的Validation.HasError启用/禁用按钮。 (使用故事板

我尝试按以下方式进行:

故事板:

<Window.Resources>
    <Storyboard x:Key="SB" x:Name="SB">
       <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.IsEnabled)">
          <DiscreteBooleanKeyFrame KeyTime="0" Value="False"/>
        </BooleanAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>

文本框:(Bind to Num - only int)

 <TextBox x:Name="txt1" Grid.Row="1" Text="{Binding Num}" Height="50" Width="200">

按钮:

<Button x:Name="Btn1"  Height="50" Width="200" Content="My Button">
            <Button.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=txt1, Path=Validation.HasError}" Value="True">
                            <DataTrigger.EnterActions>
                                <BeginStoryboard Storyboard="{StaticResource SB}"/>
                            </DataTrigger.EnterActions>
                            <DataTrigger.ExitActions>
                                <RemoveStoryboard BeginStoryboardName="SB"/>
                            </DataTrigger.ExitActions>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>

它不起作用。

如果我把Style放在下面的TextBox上,它可以工作(它不允许TextBox):

  <TextBox x:Name="txt1" Grid.Row="1" Text="{Binding Num}" Height="50" Width="200">
        <TextBox.Style>
            <Style>
                <Style.Triggers>
                    <Trigger Property="Validation.HasError" Value="True">
                        <Trigger.EnterActions>
                            <BeginStoryboard Storyboard="{StaticResource SB}"/>
                        </Trigger.EnterActions>
                        <Trigger.ExitActions>
                            <RemoveStoryboard BeginStoryboardName="SB"/>
                        </Trigger.ExitActions>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </TextBox.Style>
    </TextBox>

问题是我不能像这样在Trigger上设置SourceName,并在按钮上以相同的方式设置它。

如果我这样做,我会收到错误:

  

无法在Style.Triggers部分中设置SourceName属性。

我会喜欢一些帮助...

1 个答案:

答案 0 :(得分:1)

我失踪了,括号:

<DataTrigger Binding="{Binding ElementName=txt1,Path=(Validation.HasError)}" Value="True">