Установить TextDecoration в ошибке триггера - PullRequest
1 голос
/ 23 июня 2011

Первоначально я пытался изменить цвет пера в TextDecoration с помощью триггера, но когда я установил свойство x: Name для пера, у меня возникла ошибка, цель не найдена, поэтому я изменил свой шаблон на следующее:

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

Теперь приложение собирается без ошибок, но когда я его запускаю, я получаю сообщение об ошибке:

Невозможно добавить содержимое типа «System.Windows.TextDecoration» к объекту типа System.Windows.TextDecorationCollection

Что не так? Или может быть есть другой способ?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Невозможно воспроизвести такую ​​ошибку. Обратите внимание, что ваши триггеры в том виде, в каком они есть, не будут работать, даже если ошибки не было, поскольку вы напрямую устанавливаете значения для целевых объектов, которые имеют приоритет над установщиками триггеров.

Вот пример переменной 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 голосов
/ 16 декабря 2017

Мой аналогичный подход, но без шаблонного контроля.

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...