C# 只有一个文本块的用户控件。如何向消费者公开TextWrapping属性?

C# 只有一个文本块的用户控件。如何向消费者公开TextWrapping属性?,c#,wpf,xaml,wpf-controls,C#,Wpf,Xaml,Wpf Controls,我有一个极简的用户控件,包含一个文本块,我的原型如下: <Grid> <TextBlock x:Name="textBlockExt" x:FieldModifier="public"/> </Grid> 然后,我通过 <Grid> <StackPanel> <local:TextBlockExt FontSize="30" x:Name="txb" Text="Hello World" Text

我有一个极简的
用户控件
,包含一个
文本块
,我的原型如下:

<Grid>
    <TextBlock x:Name="textBlockExt" x:FieldModifier="public"/>
</Grid>
然后,我通过

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

我不喜欢上面的
主窗口中的代码
构造函数,需要知道如何在XAML中设置t
extWrapping

向TextBlockText类添加属性TextWrapping。使用与文本属性相同的方法:

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

您可以使用与
Text
属性相同的方法执行此操作。我以前遇到过此问题。我不得不扩展TextBox类一次。我选择从TextBox继承而不是从UserControl继承(有点与研究相反)。您可能想考虑继承TextBlock而不是UserControl。这意味着您可以在已有内容的基础上添加所需内容,而无需“重新暴露”已有内容。
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";
}
public TextWrapping TextWrapping {
    get => txtBlockExt.TextWrapping;
    set { txtBlockExt.TextWrapping = value: }
}