0

WaterMarkを含むTextBoxを含むユーザーコントロールがあります

<AdornerDecorator>
                        <TextBox 
                            Height="20" 
                            Margin="10,0" 
                            Grid.Column="0" 
                            Text="{Binding MainCategoryTextBoxValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Name="MainCatTextBox">

                            <controls:WatermarkService.Watermark>
                                <TextBlock VerticalAlignment="Center" x:Name="MainCategoryTextBlock"> </TextBlock>
                            </controls:WatermarkService.Watermark>
                        </TextBox>
</AdornerDecorator>

ここでWatermarkServiceの実装を見ることができます https://stackoverflow.com/a/836463/1548347

ViewModelからRunTimeの透かしテキストを変更するために、 「MainCategoryTextBlock」テキストブロックを内部に取り<controls:WatermarkService.Watermark>、DataContextをUserControlDataContextと同じに設定したいと思います。

"MainCategoryTextBlock"DataContextをRelativeSourceでUserControlDataContextにバインドしようとしましたが、成功しませんでした(おそらく構文エラー-わかりません)。

DataContext="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 

どうすれば解決できるかわかりますか?

ありがとう

4

2 に答える 2

0

UserControl に名前がある場合は、次のようにできます。

DataContext={Binding ElementName="YourUserControlName", Path=DataContext}

FindAncestorしかし、テキスト ボックスと UserControl が同じビジュアル ツリーに属していないため、この場合は使用できません。

于 2013-03-04T01:26:43.407 に答える
0

ウィンドウのデータ コンテキスト プロパティをビュー モデルに設定し、テキスト ブロックのテキスト プロパティをビュー モデル プロパティにバインドする必要があります。

<TextBlock Text={Binding Path=PropertyOnViewModel} />
于 2013-03-03T20:44:39.583 に答える