首页 > 解决方案 > 只有一个 TextBlock 的用户控件。如何向消费者公开 TextWrapping 属性?

问题描述

我有一个极简主义者UserControl,其中包含一个TextBlock我的原型如下:

<Grid>
    <TextBlock x:Name="textBlockExt" x:FieldModifier="public"/>
</Grid>
public partial class TextBlockExt : UserControl
{
    public TextBlockExt()
    {
        InitializeComponent();

        DataContext = this;
    }

    public string Text
    {
        get => textBlockExt.Text;
        set { textBlockExt.Text = value.ToUpper(); } // to be expanded later
    }
}

然后我通过

<Grid>
    <StackPanel>
        <local:TextBlockExt FontSize="30" x:Name="txb" Text="Hello World" TextBlock.TextAlignment="Center"/>
        <Button Content="To Upper" Width="100" Click="Button_Click"/>
    </StackPanel>
</Grid>

它背后的代码是

public MainWindow()
{
    InitializeComponent();

    txb.textBlockExt.TextWrapping = TextWrapping.WrapWithOverflow;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    txb.Text = "one two three four five six seven eight";
}

我不喜欢MainWindow上面构造函数中的代码,需要知道如何extWrapping在 XAML中设置 T。

标签: c#wpfxamlwpf-controls

解决方案


将属性 TextWrapping 添加到您的 TextBlockExt 类。使用与 Text 属性相同的方式:

public TextWrapping TextWrapping {
    get => txtBlockExt.TextWrapping;
    set { txtBlockExt.TextWrapping = value: }
}

推荐阅读