使用DataTrigger for TextBlock Horizo​​ntalAlignment属性

时间:2017-02-02 08:38:36

标签: wpf xaml text

在我的GridTextBlockButton。 如果看不到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>

我收到错误:

  

&#39;的Horizo​​ntalAlignment&#39;成员无效,因为它没有合格的类型名称。

所以我尝试添加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

我该怎么做?

2 个答案:

答案 0 :(得分:0)

尝试使用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>

答案 1 :(得分:0)

请勿尝试使用TextBlock.Triggers,而应使用Style转换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>

请注意the documentation,因为它提到了为什么需要样式触发器。

  

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