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中设置textWrapping
。向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: }
}