2017-02-02 2 views
0

На моем Grid У меня есть TextBlock и Button. Если Button не отображается, я хочу, чтобы мой TextBlock.HorizontalAlignment был установлен в Center. Если видна Button, я хочу, чтобы мой TextBlock.HorizontalAlignment был установлен в Right. Вот мой код:Использование DataTrigger для 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="HorizontalAlignment" Value="Right" /> 
     </DataTrigger> 
    </TextBlock.Triggers> 
</TextBlock> 

Я получаю ошибку:

'HorizontalAlignment' member is not valid because it does not have a qualifying type name.

Так что я пытался добавить 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

Как мне это сделать?

ответ

0

Попробуйте сделать это со стилем

<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> 
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, как говорится, почему здесь нужны триггеры типа.

Note that the collection of triggers established on an element only supports EventTrigger, not property triggers (Trigger). If you require property triggers, you must place these within a style or template and then assign that style or template to the element either directly through the Style property, or indirectly through an implicit style reference.

+0

Спасибо. В чем причина, почему мое решение (без стиля) не сработало? Что означает первая ошибка? – Gabriel

+0

@ Gabriel добавил этот аспект к ответу. – grek40