簡體   English   中英

WPF用戶控件中用於對齊的覆蓋屬性無法按預期工作

[英]Overwritten properties for alignment in WPF usercontrol are not working as expected

我此時正在編程一些WPF用戶控件(沒有CustomControls!)-由少量嵌套控件組成-並在UserControl的CS文件中重寫了一些繼承的屬性,例如Horizo​​ntalContentAlignment和“ new”。 通常,我的用戶控件由一個Border組成,在每個示例中,它都是一個Label(帶有TextBlock作為內容的Label)(用於包裝文本)。 除對齊方式外,所有屬性均正常運行。 只要我使用自己的屬性pe“ ControlHorizo​​ntalContentAlignment”,它就會按預期工作:標簽填充邊框,TextBlock位於pe右下角。 但是現在,隨着Horizo​​ntalContentAlignment被覆蓋,Label不再填充Border控件。

似乎存在諸如Horizo​​ntalContentAlignment之類的重寫屬性的問題。 我該如何解決這個問題?

我的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);
    }
}

提前致謝!

隱藏Horizo​​ntalContentAlignment屬性( 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是存儲在資源中的轉換器的實例

此處的轉換器示例: WPF將Horizo​​ntalAlignment綁定到TextAlignment

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM