2

ここでどこが間違っているのかわかりません。うまくいけば、あなたの一人が助けることができます。

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などを設定する必要がありますか?これにより、このウィンドウの他の部分が破損する可能性があります。

4

2 に答える 2

2

はい、「TopMost」プロパティがオンになっているオブジェクトはすべて、ウィンドウのDataContextとして設定する必要があります。ウィンドウのDataContextとして設定されている場合、コントロールは、最初の例で試したElementNameバインディングからプロパティを取得できるはずです。

ビューは、「TopMost」という名前のプロパティのDataContextを確認します。

于 2012-04-05T21:59:52.160 に答える
1

私が覚えている限り、メニューは実際にはウィンドウのビジュアルツリーの一部ではないポップアップに描画されます。したがって、ここでMVVMを使用して、ビューモデルを介してIsCheckedを設定することをお勧めします。

于 2012-04-05T21:55:06.513 に答える