Wpf 对TextBlock HorizontalAlignment属性使用DataTrigger

Wpf 对TextBlock HorizontalAlignment属性使用DataTrigger,wpf,xaml,text,Wpf,Xaml,Text,在我的网格上有文本块和按钮。 如果按钮不可见,我希望我的文本块.水平对齐设置为居中。 如果按钮可见,我希望我的文本块.水平对齐设置为右侧。这是我的密码: <TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" > <TextBlock.Trigge

在我的
网格上
文本块
按钮
。 如果
按钮
不可见,我希望我的
文本块.水平对齐
设置为
居中
。 如果
按钮
可见,我希望我的
文本块.水平对齐
设置为
右侧
。这是我的密码:

<TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" >
    <TextBlock.Triggers>
        <DataTrigger Binding="{Binding ElementName=myButton, Path=IsVisible}" Value="True">
            <Setter Property="HorizontalAlignment" Value="Right" />
        </DataTrigger>
    </TextBlock.Triggers>
</TextBlock>
我得到一个错误:

XamlParseException


我该怎么做

试着用风格来做到这一点

<TextBlock Grid.Row="0" VerticalAlignment="Center" Name="myTextBlock" Text="{Binding TileTextId}" TextWrapping="Wrap" TextAlignment="Center" >
    <TextBlock.Style>
        <Style TargetType="TextBlock">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=myButton, Path=IsVisible}" Value="True">
                    <Setter Property="HorizontalAlignment" Value="Right" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

不要尝试使用
TextBlock.Triggers
,而是使用
Style.Triggers
选择
样式

<StackPanel>
    <TextBlock Text="TextBlock Content" Margin="5">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="HorizontalAlignment" Value="Center"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=myButton,Path=IsVisible}" Value="True">
                        <Setter Property="HorizontalAlignment" Value="Right"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <Button x:Name="myButton" Content="Click Me!" Margin="5"/>
</StackPanel>

注意,正如上面提到的,为什么这里需要样式触发器

请注意,仅在元素上建立的触发器集合 支持EventTrigger,而不是属性触发器(Trigger)。如果你需要 属性触发器时,必须将其放置在样式或模板中,然后 然后直接将该样式或模板指定给元素 通过样式属性,或间接通过隐式样式 参考资料


谢谢我的解决方案(没有风格)不起作用的原因是什么?第一个错误是什么意思?@Gabriel在答案中添加了这一方面。
<StackPanel>
    <TextBlock Text="TextBlock Content" Margin="5">
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="HorizontalAlignment" Value="Center"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=myButton,Path=IsVisible}" Value="True">
                        <Setter Property="HorizontalAlignment" Value="Right"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <Button x:Name="myButton" Content="Click Me!" Margin="5"/>
</StackPanel>