2011-06-23 31 views
1

本來我試圖通過觸發器更改TextDecoration中筆的顏色,但是當我設置x:名稱屬性的筆我有一個目標未找到的錯誤,所以我已將模板更改爲以下內容:在觸發錯誤中設置TextDecoration

<ControlTemplate x:Key="TabButton" TargetType="{x:Type Button}"> 
    <Border x:Name="border" Padding="10,5" CornerRadius="5,5,0,0" Background="#62A9FF"> 
     <TextBlock x:Name="text" Text="{TemplateBinding Content}" 
        Cursor="Hand" Foreground="#F9FCFF"> 
      <TextBlock.TextDecorations> 
       <TextDecoration Location="Underline" 
       PenThicknessUnit="FontRecommended"> 
       <TextDecoration.Pen> 
        <Pen Brush="White" Thickness="1"> 
        <Pen.DashStyle> 
         <DashStyle Dashes="5"/> 
        </Pen.DashStyle> 
        </Pen> 
       </TextDecoration.Pen> 
       </TextDecoration> 
      </TextBlock.TextDecorations> 
     </TextBlock> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="local:MainWindow.TabActive" Value="False"> 
      <Setter TargetName="border" Property="Background" Value="Transparent"/> 
      <Setter TargetName="text" Property="Foreground" Value="Black"/> 
      <Setter TargetName="text" Property="TextDecorations"> 
       <Setter.Value> 
        <TextDecorationCollection> 
         <TextDecoration Location="Underline"> 
          <TextDecoration.Pen> 
           <Pen Brush="Gray" Thickness="1"> 
            <Pen.DashStyle> 
             <DashStyle Dashes="5"/> 
            </Pen.DashStyle> 
           </Pen> 
          </TextDecoration.Pen> 
         </TextDecoration> 
        </TextDecorationCollection> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

現在構建應用程序沒有錯誤,但是當我運行它,我得到錯誤:

Cannot add content of type 'System.Windows.TextDecoration' to an object of type System.Windows.TextDecorationCollection

有什麼不對?或者可能有另一種方式?

回答

3

無法重現這樣的錯誤。請注意,即使沒有錯誤,您的觸發器也不會工作,因爲您直接在觸發器設置器上設置了precedence的目標對象上的值。

這裏是可變TextDecorations其中工程的一個例子,在鼠標懸停改變:

<ContentControl Content="Test"> 
    <ContentControl.Template> 
     <ControlTemplate TargetType="{x:Type ContentControl}"> 
      <TextBlock Name="tb" Text="{TemplateBinding Content}"> 
       <TextBlock.Style> 
        <Style TargetType="{x:Type TextBlock}"> 
         <Setter Property="TextDecorations"> 
          <Setter.Value> 
           <TextDecorationCollection> 
            <TextDecoration> 
             <TextDecoration.Pen> 
              <Pen Brush="Blue" /> 
             </TextDecoration.Pen> 
            </TextDecoration> 
           </TextDecorationCollection> 
          </Setter.Value> 
         </Setter> 
        </Style> 
       </TextBlock.Style> 
      </TextBlock> 
      <ControlTemplate.Triggers> 
       <Trigger Property="ContentControl.IsMouseOver" Value="True"> 
        <Setter TargetName="tb" Property="TextDecorations"> 
         <Setter.Value> 
          <TextDecorationCollection> 
           <TextDecoration> 
            <TextDecoration.Pen> 
             <Pen Brush="Red" /> 
            </TextDecoration.Pen> 
           </TextDecoration> 
          </TextDecorationCollection> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 
    </ContentControl.Template> 
</ContentControl> 
+0

謝謝!設置初始值throgh風格確實有助於解決問題 – Alexander

0

礦是一種類似的方法,但沒有模板對照。

<TextBlock Text="5000.00" FontSize="20" > 
    <TextBlock.Style> 
     <Style TargetType="TextBlock"> 
      <Style.Triggers> 
       <Trigger Property ="IsMouseOver" Value="True"> 
        <Setter Property="TextDecorations"> 
         <Setter.Value> 
          <TextDecorationCollection> 
           <TextDecoration Location="Underline"> 
            <TextDecoration.Pen> 
             <Pen Brush="Red"/> 
            </TextDecoration.Pen> 
           </TextDecoration> 
          </TextDecorationCollection> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
       <Trigger Property ="IsMouseOver" Value="False"> 
        <Setter Property="TextDecorations"> 
         <Setter.Value> 
          <TextDecorationCollection> 
           <TextDecoration Location="Underline"> 
            <TextDecoration.Pen> 
             <Pen Brush="LimeGreen"/> 
            </TextDecoration.Pen> 
           </TextDecoration> 
          </TextDecorationCollection> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBlock.Style> 
</TextBlock>