如何在XAML中修改WPF用户控件内Label的文本?
如何在XAML中直接修改WPF用户控件内Label的文本?
你现在遇到的问题是用户控件没暴露内部Label的可配置属性,所以直接加Content没用。要实现XAML直接设置标题,得给PL_TopBar_Control加个依赖属性,这是WPF里自定义控件可配置项的标准做法,比直接访问public控件更规范。
步骤1:给用户控件添加依赖属性
打开PL_TopBar_Control.xaml.cs,添加以下代码:
// 定义依赖属性,让外部能通过XAML设置 public static readonly DependencyProperty HeaderTextProperty = DependencyProperty.Register( "HeaderText", typeof(string), typeof(PL_TopBar_Control), new PropertyMetadata("Header") // 默认值设为原来的"Header" ); // 包装属性,方便代码里访问 public string HeaderText { get => (string)GetValue(HeaderTextProperty); set => SetValue(HeaderTextProperty, value); }
然后修改用户控件的XAML,把Header_L的Content绑定到这个新属性:
<Label x:Name="Header_L" x:FieldModifier="public" Content="{Binding HeaderText, RelativeSource={RelativeSource AncestorType={x:Type Controls:PL_TopBar_Control}}}" Foreground="#FFF2F2F2" HorizontalAlignment="Left" Padding="5,0,5,0" />
步骤2:在引用控件的XAML中直接设置标题
现在你就能在窗口的XAML里直接给用户控件加HeaderText属性来改标题了:
<Grid x:Name="Window_Grid"> <Controls:PL_TopBar_Control VerticalAlignment="Top" HeaderText="你的自定义标题"/> </Grid>
为什么之前的Content没用?
WPF里用户控件本身的Content属性是用来设置控件内部的整体内容的,和你内部Header_L的Content不是一回事。WinForms里可能直接访问子控件属性,但WPF更推荐通过依赖属性暴露可配置项,这样不仅能在XAML里设置,还能支持绑定、样式等WPF特性。
内容的提问来源于stack exchange,提问作者SmellyFox
相关产品推荐
相关产品推荐

