对文本块水平对齐属性使用 DataTrigger



在我的Grid上,我有TextBlockButton。如果Button不可见,我希望将我的TextBlock.HorizontalAlignment设置为 Center 。如果Button可见,我希望将我的TextBlock.HorizontalAlignment设置为 Right .这是我的代码:

<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>

我收到错误:

"水平对齐"成员无效,因为它没有限定类型名称。

所以我尝试添加TextBlock.HorizontalAlignment,如下所示:

<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="TextBlock.HorizontalAlignment" Value="Right" />
        </DataTrigger>
    </TextBlock.Triggers>
</TextBlock>

我收到错误:

XamlParseException

我应该怎么做?

不要尝试使用TextBlock.Triggers,而是与Style.Triggers进行Style

<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>

请注意文档,因为它提到,为什么这里需要样式触发器。

请注意,仅在元素上建立的触发器集合 支持事件触发器,而不是属性触发器(触发器)。如果您需要 属性触发器,您必须将它们放置在样式或模板中,并且 然后将该样式或模板直接分配给元素 通过 Style 属性,或间接通过隐式样式 参考。

尝试使用 Style 执行此操作

<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>

最新更新