私は以下のリソースを持っています。リソース内のテキストブロックに値をバインド
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:samplePrjkt"
>
<ToolBar x:Key="MyToolbar" Height="120">
<!--Template-->
<GroupBox Header="Template" Style="{StaticResource ToolbarGroup}" Margin="3">
<StackPanel Grid.Row="1" Orientation="Horizontal">
<StackPanel Orientation="Vertical" Margin="0,2,0,2">
<TextBlock Text="{Binding TextValue}"></TextBlock>
</StackPanel>
</StackPanel>
</GroupBox>
</ToolBar>
</ResourceDictionary>
このソースコードは、次のようにWPFユーザーコントロールで使用されます。
<UserControl x:Class="Sampleprjkt.sample.sampleWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Sampleprjkt"
>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="29*"/>
<RowDefinition Height="107*"/>
</Grid.RowDefinitions>
<ContentControl Content="{StaticResource MyToolbar}"/>
</Grid>
</UserControl>
私は
public partial class SampleWindow : UserControl
{
private string _textValue;
public string TextValue
{
get { return _textValue; }
set
{
_textValue = value;
}
}
public SampleWindow()
{
InitializeComponent();
_textValue = "XXXXX";
}
}
を次のようにWPFユーザーコントロールのコンストラクタ内でこのテキストブロックに値をバインドしようとしているが、私はこれを実行したら、私はに設定されていない「XXXXX」の値を見ることができます<TextBlock Text="{Binding TextValue}"></TextBlock>
、私がここで逃したものは?
私はあなたが修正することができたとしrelativeSource: 'Text =" {Binding TextValue、RelativeSource = {RelativeSource AncestorType = SampleWindow}} "を追加することによってバインドします。 – ASh
@ASh - 私はデザインが疑わしいと思うことに同意しますが、ここでRelativeSourceバインディングを追加することで問題をさらに複雑にすることはありませんか?親が常に独立したResourceDictionaryで定義されているコントロールインスタンスに対するUserControl/SampleWindowであることを前提としていますか? – Ada