私はこの時点でいくつかのWPF UserControls(CustomControlsなし)を作成しています。 UserControlは、 "new"というHorizontalContentAlignmentのような継承されたプロパティの一部です。 一般的に私のユーザコントロールはBorderで構成されています。その例では、Content(Textwrappingの可能性)としてTextBlockを持つLabelがあります。 アラインメントを除くすべてのプロパティが正常に機能しています。 私自身のプロパティを使用している限り、p.e. "ControlHorizontalContentAlignment"は期待どおりに機能しました:ラベルは枠線を満たし、TextBlockはp.e.右下にあります。 しかし、HorizontalContentAlignmentを上書きすると、ラベルは境界線コントロールにはもう埋め込まれません。WPF usercontrolでの配置の上書きされたプロパティが期待通りに機能しない
HorizontalContentAlignmentのようなプロパティを上書きすると問題が発生しているようです。 どうすれば問題を処理できますか?
ラベルのための私の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);
}
}
ありがとうございます!
「問題があること」である。さて、問題は何ですか? –
オーバーライドされたプロパティHorizontalContentAlignmentではなく、Borderコントロールのプロパティが使用されているようです。 –