我在这个时间编程一些WPF UserControls(没有CustomControls!) - 由一些嵌套控件组成 - 并在UserControl的CS文件中覆盖一些继承的属性,如HorizontalContentAlignment with& #34;新&#34 ;. 一般来说,我的用户控件由一个边框组成,每个例子中都有一个带有TextBlock作为内容的Label(用于文本包装的可能性)。 除对齐外,所有属性都运行良好。 只要我使用自己的属性p.e. " ControlHorizontalContentAlignment"它按预期工作:标签填充边框,TextBlock是p.e.在右下角。 但是现在覆盖了HorizontalContentAlignment,Label不再填充Border控件。
似乎存在覆盖像HorizontalContentAlignment这样的属性的问题。 我该如何处理这个问题?
我对Label的UserControl在XAML中定义如下:
<UserControl x:Class="UsercontrolExample.UserControls.ControlLabel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:UsercontrolExample.UserControls"
mc:Ignorable="d"
d:DesignHeight="30"
d:DesignWidth="150">
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Border x:Name="border"
Style="{StaticResource usercontrolBorderStyle}">
<Label x:Name="label" Background="Yellow" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch"
Margin="2">
<TextBlock x:Name="textblock" Background="Orange"
Text="Label Label"
TextWrapping="Wrap"/>
</Label>
</Border>
</Grid>
</UserControl>
资源usercontrolBorderStyle:
<Style x:Key="usercontrolBorderStyle">
<Setter Property="Border.BorderBrush" Value="RoyalBlue"/>
<Setter Property="Border.BorderThickness" Value="1"/>
<Setter Property="Border.HorizontalAlignment" Value="Stretch"/>
<Setter Property="Border.VerticalAlignment" Value="Stretch"/>
</Style>
这是被覆盖的属性:
public new HorizontalAlignment HorizontalContentAlignment
{
get { return Converter.ConvertTextAlignmentToHorizontalAlignment(textblock.TextAlignment); }
set {textblock.TextAlignment = Converter.ConvertHorizontalAlignmentToTextAlignment(value); }
}
这是我自己的原创财产:
public HorizontalAlignment ControlHorizontalContentAlignment
{
get { return label.HorizontalContentAlignment; }
set
{
label.HorizontalContentAlignment = value;
textblock.TextAlignment = Converter.ConvertHorizontalAlignmentToTextAlignment(value);
}
}
提前致谢!
答案 0 :(得分:0)
隐藏HorizontalContentAlignment属性(new HorizontalAlignment HorizontalContentAlignment
)并不是一个好主意。我认为你可以避免这种情况,如果使用正确的绑定(需要新的转换器)
<UserControl x:Class="UsercontrolExample.UserControls.ControlLabel"
x:Name="myLabel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid x:Name="LayoutRoot">
...
<TextBlock x:Name="textblock" Background="Orange"
Text="Label Label"
HorizontalAlignment="Stretch"
TextAlignment="{Binding HorizontalContentAlignment,
ElementName=myLabel,
Converter={StaticResource HorizontalToText}}"
TextWrapping="Wrap"/>
</Grid>
</UserControl>
HorizontalToText
是存储在Resources