2013-05-22 82 views
0

我想創建一箇中心化的TextBlock,我的第一步是嘗試使用Canvas.Left綁定ActualWidth的觸發器來查看它是否工作,但不幸的是它不起作用,它不工作之後:TextBlock上的WPF觸發器不起作用C#

LTest.HorizontalAlignement = Center; 

我也試過xmal的c#代碼版本,它也不工作。

有人幫我解決嗎?有一天我一直爲此感到困擾。

這是在Canvas

<TextBlock Canvas.Left="200" TextWrapping="Wrap" Text="Test222" Canvas.Top="200" FontSize="48" x:Name="LTest"> 
    <TextBlock.Style> 
     <Style TargetType="{x:Type TextBlock}"> 
      <Style.Triggers> 
       <Trigger Property="HorizontalAlignment" Value="Center"> 
        <Setter Property="Canvas.Left" Value="{Binding RelativeSource={RelativeSource Self} 
        , Path=ActualWidth}"></Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock> 

EDIT1:

看來它並不適用於

Canvas.Left 

工作,我有

UIElement.Visibility 

這是確定測試

任何人都可以幫我讓它與Canvas.Left一起使用嗎?

回答

1

您shold在樣式設置Canvas.Left,所以觸發操縱這個屬性不會被忽略,因爲你把它放在控制decleration

<TextBlock TextWrapping="Wrap" Text="Test222" Canvas.Top="200" FontSize="48" x:Name="LTest"> 
     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Setter Property="Canvas.Left" Value="200"/> 
       <Style.Triggers> 
        <Trigger Property="HorizontalAlignment" Value="Center"> 
         <Setter Property="Canvas.Left" Value="{Binding RelativeSource={RelativeSource Self},Path=ActualWidth}"/> 

        </Trigger> 
       </Style.Triggers> 
      </Style> 
      </TextBlock.Style> 
     </TextBlock> 
+1

而這樣做的原因是[依賴項屬性值優先級( http://msdn.microsoft.com/en-us/library/ms743230.aspx) –

+0

謝謝你解決了這個問題,但這使我的設計意義更少,因爲這意味着我不能在代碼中設置canvas.Left動態,一旦我執行Canvas.SetLeft()就會產生問題。我的想法是重置Canvas.Left根據ActualWidth和當前Canvas.Left,所以....這對我有點不好。 – Enzojz