[英]Overwritten properties for alignment in WPF usercontrol are not working as expected
我此時正在編程一些WPF用戶控件(沒有CustomControls!)-由少量嵌套控件組成-並在UserControl的CS文件中重寫了一些繼承的屬性,例如HorizontalContentAlignment和“ new”。 通常,我的用戶控件由一個Border組成,在每個示例中,它都是一個Label(帶有TextBlock作為內容的Label)(用於包裝文本)。 除對齊方式外,所有屬性均正常運行。 只要我使用自己的屬性pe“ ControlHorizontalContentAlignment”,它就會按預期工作:標簽填充邊框,TextBlock位於pe右下角。 但是現在,隨着HorizontalContentAlignment被覆蓋,Label不再填充Border控件。
似乎存在諸如HorizontalContentAlignment之類的重寫屬性的問題。 我該如何解決這個問題?
我的Label用戶控件在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);
}
}
提前致謝!
隱藏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
是存儲在資源中的轉換器的實例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.