ImageとTextBlockを含むボタンのテンプレートを作成しました。両方の外観を変更したいので、テンプレートに含める必要があると思います。ただし、もちろん、このテンプレートのすべてのインスタンスが同じテキストと画像を表示する必要はありません。
これまで、「Text」/「Source」で「カスタムパス式を使用する」という有望なプロパティを見つけました。TextBlock/Imageの値は次の場所にあります。
Data Binding... > Element Property > Use a custom path expression
ボタンのインスタンスでこの値を設定したいと思います。ボタンのXAMLに手動でを挿入しようとしmyText="Lorem Ipsum"
ましたが、うまくいかないようです。
よろしくお願いします!
更新:これは、XAMLがどのように見えるかです:
<TextBlock [...] Text="{Binding myText, ElementName={x:Null}, FallbackValue=Lorem}"/>
アクセスできるように、これにアクセスまたは変更するにはどうすればよいですか?
更新2: TextBlockとImageのバインディングはすでに存在します。現時点では、ボタンのXAMLは次のようになっています。
<s:SurfaceButton Command="{Binding SearchCustomCommand}" Style="{DynamicResource BasicButton}">
<StackPanel Orientation="Vertical" Height="60" Width="48" IsHitTestVisible="False">
<Image Source="{StaticResource ImageSourceToolboxSearchIcon}"
[...]
Stretch="Uniform" />
<TextBlock Text="{lex:LocText ToolboxButtonSearchesCustom}"
FontFamily="{DynamicResource button.font}"
[...]
FontSize="{DynamicResource button.size}"
Foreground="{DynamicResource button.color.default}"/>
</StackPanel>
</s:SurfaceButton>
ここで、画像とテキストボックスをテンプレート(これもすでに存在します)に抽出したいので、このようにボタンを参照できます(テンプレート内のサイズや色などに関するすべての情報と、ボタンの実際のインスタンスのリソース-echtボタンの画像/テキストを個別に変更できるようにするため):
<s:SurfaceButton
Command="{Binding SearchPopularCommand}"
Style="{DynamicResource ToolboxButtonBig}"
ImageSource="{StaticResource ImageSourceToolboxSearchIcon}"
TextBlockSource="{lex:LocText ToolboxButtonSearchesCustom}"/>
StackPanelのXAML全体と、含まれているTextBlockとImageをテンプレートにコピーしました。これで、これらはすべてのボタンに表示されます(これは問題ありません)が、内容を変更することはできません。
説明がかなり貧弱な場合は申し訳ありません-私はWPFにかなり慣れていません...
更新3:さらに調査した結果、私のような質問が見つかりました。これは明らかに、私ができるよりも問題をよりよく説明しています。