ここで私が間違っているのは分かりません。うまくいけばあなたの一人が助けることができます。チェック可能なMenuItemを親ウィンドウにバインドする際に問題があります。最上部(常に上に表示される)プロパティ
私はTabControlを含むウィンドウを持っています。 TabControlには、 "always-on-top"動作のためのチェック可能な項目を持つContextMenuがあります。私は、このチェック可能な項目を、ウィンドウのブールTopmostプロパティを含むウィンドウにバインドします。
私が何をしても、バインディングは失敗し、デバッグ出力に「バインド元が見つかりません」というエラーが表示されます。
(。これらの抜粋が大幅に私の実際のコードから簡略化されている私は、私が誤って、関連するものを切り取っていなかった願っています。)
まず、私はこれを試してみました: didnの
<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などを設定する必要はありますか?これはおそらくこのウィンドウの他の部分を壊す可能性があります。
DataContextとElementNameの関係は何ですか?彼らはどちらも同じことをしているように見えますか? –
DataContextは、ビューのバッキングプロパティを表すオブジェクトです。任意の単純なバインディング式は、バインドされたプロパティのDataContextを調べます。 ElementNameバインディングは、要素の属性を別の要素の属性にバインドすることを意味します(たとえば、テキストボックスのテキスト属性をボタンのコンテンツ属性にバインドするなど)。 – KodeKreachor
私はまだフォローしません。私は** "**要素の属性を別の要素の属性にバインドしています"(つまり、私はMenuItem.IsCheckedをmyWindow.Topmostにバインドしています)。 DataContextの目的は何ですか?なぜ私はそれを与えた明示的なElementName以外の場所を探していますか? –