ここでどこが間違っているのかわかりません。うまくいけば、あなたの一人が助けることができます。
TabControlを含むウィンドウがあります。TabControlには、「常に最上位」の動作のチェック可能な項目を含むContextMenuがあります。このチェック可能なアイテムを、含まれているWindowのブール値のTopmostプロパティにバインドしたいと思います。
何をしても、バインディングが失敗し、デバッグ出力に「バインディングのソースが見つかりません」というエラーが表示されます。
(これらの抜粋は、実際のコードから大幅に簡略化されています。誤って関連するものを切り取っていないことを願っています。)
最初に私はこれを試しました:
<Window x:Name="myWindow" (blah blah other properties)>
<TabControl x:Name="tabControl">
<TabControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Always on Top" IsCheckable="True"
IsChecked="{Binding ElementName=myWindow,
Path=Topmost,
Mode=TwoWay}"/>
</ContextMenu>
...
それはうまくいきませんでした。MenuItemがウィンドウ「myWindow」内にあるためですか?RelativeSource Ancestorバインディングを使用する必要がありますか?
だから私はこれを試しました:
<Window x:Name="myWindow" (blah blah other properties)>
<TabControl x:Name="tabControl">
<TabControl.ContextMenu>
<ContextMenu>
<MenuItem Header="Always on Top" IsCheckable="True"
IsChecked="{Binding RelativeSource={
RelativeSource FindAncestor,
AncestorType={x:Type Window}
},
Path=Topmost,
Mode=TwoWay}"/>
</ContextMenu>
...
それもうまくいきませんでした。
だから今私は立ち往生しています。このバインディングを機能させるにはどうすればよいですか?
注:私のコードビハインドは、これらの要素に対して何もしていません。Window.DataContextなどを設定する必要がありますか?これにより、このウィンドウの他の部分が破損する可能性があります。