2016-04-29 4 views
0

私はこの時点でいくつかのWPF UserControls(CustomControlsなし)を作成しています。 UserControlは、 "new"というHorizo​​ntalContentAlignmentのような継承されたプロパティの一部です。 一般的に私のユーザコントロールはBorderで構成されています。その例では、Content(Textwrappingの可能性)としてTextBlockを持つLabelがあります。 アラインメントを除くすべてのプロパティが正常に機能しています。 私自身のプロパティを使用している限り、p.e. "ControlHorizo​​ntalContentAlignment"は期待どおりに機能しました:ラベルは枠線を満たし、TextBlockはp.e.右下にあります。 しかし、Horizo​​ntalContentAlignmentを上書きすると、ラベルは境界線コントロールにはもう埋め込まれません。WPF usercontrolでの配置の上書きされたプロパティが期待通りに機能しない

Horizo​​ntalContentAlignmentのようなプロパティを上書きすると問題が発生しているようです。 どうすれば問題を処理できますか?

ラベルのための私の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

オーバーライドされたプロパティHorizo​​ntalContentAlignmentではなく、Borderコントロールのプロパティが使用されているようです。 –

答えて

0

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 binding HorizontalAlignment to TextAlignment

+0

ありがとう、ASh!アラインメントプロパティをオーバーライドするのは本当に危険です。その間、私はその事件で自分の財産に戻った。面白い:FontSizeやFontweightのような他のプロパティは問題を発生させません。 –

関連する問題