是否可以通过Style使用TextDecorations属性的TextBlock实现?

时间:2016-04-05 13:02:34

标签: c# wpf xaml

我们正在VS 2015中使用WPF,并希望在以下控件中实现TextDecorations属性: - 按钮 - 复选框 - 标签 - RadioButton

一种方法是将TextBlock控件实现为内容,如:

<CheckBox x:Name="checkbox">
    <TextBlock>
        CheckBox<Run TextDecorations="Underline"></Run>
    </TextBlock>
</CheckBox>

然后 - 在代码中 - 可以调整属性:

FrameworkElement fe = this.checkbox;
if (fe.GetType().GetProperty("Content") != null && fe.GetType().GetProperty("Content").GetValue(fe).GetType() == typeof(TextBlock))
{
    FrameworkElement tbb = (FrameworkElement)fe.GetType().GetProperty("Content").GetValue(fe);
    tbb.GetType().GetProperty("TextDecorations").SetValue(tbb, TextDecorations.Underline);
}

但我们真正想要的是通过类似这样的风格实现:

<Style x:Key="checkboxStyle" TargetType="{x:Type CheckBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Grid x:Name="container">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="2*"/>
                        <RowDefinition/>
                    </Grid.RowDefinitions>
                    <TextBlock x:Name="display"
                                       Grid.Row="1"
                                       Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}"
                                       Margin="5,2,5,2"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

这可能吗,有人知道它的一个例子吗?

提前致谢, 帕特里克

1 个答案:

答案 0 :(得分:0)

只需在TextDecorations="Underline"上的TextBlock

中添加ControlTemplate即可
<TextBlock TextDecorations="Underline" x:Name="display" Grid.Row="1" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" Margin="5,2,5,2"/>