第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從ContextMenu中的MenuItem綁定ElementName

從ContextMenu中的MenuItem綁定ElementName

手掌心 2019-09-02 15:08:44
是否有人注意到帶有ElementName的Bindings無法正確解析MenuItem對象中包含的ContextMenu對象?看看這個樣本:<Window x:Class="EmptyWPF.Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    Title="Window1" Height="300" Width="300"    x:Name="window">    <Grid x:Name="grid" Background="Wheat">        <Grid.ContextMenu>            <ContextMenu x:Name="menu">                <MenuItem x:Name="menuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>                <MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>                <MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>                <MenuItem Header="Menu Item" Tag="{Binding ElementName=menuItem}" Click="MenuItem_Click"/>            </ContextMenu>        </Grid.ContextMenu>        <Button Content="Menu"                 HorizontalAlignment="Center" VerticalAlignment="Center"                 Click="MenuItem_Click" Tag="{Binding ElementName=menu}"/>        <Menu HorizontalAlignment="Center" VerticalAlignment="Bottom">            <MenuItem x:Name="anotherMenuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>            <MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>            <MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>            <MenuItem Header="Menu Item" Tag="{Binding ElementName=anotherMenuItem}" Click="MenuItem_Click"/>        </Menu>    </Grid></Window>除了ContextMenu中包含的綁定之外,所有綁定都很有效。它們在運行時將錯誤輸出到“輸出”窗口。有誰知道任何工作?這里發(fā)生了什么?
查看完整描述

3 回答

?
慕仙森

TA貢獻1827條經(jīng)驗 獲得超8個贊

我找到了一個更簡單的解決方案。


在UserControl背后的代碼中:


NameScope.SetNameScope(contextMenu, NameScope.GetNameScope(this));


查看完整回答
反對 回復(fù) 2019-09-02
?
喵喔喔

TA貢獻1735條經(jīng)驗 獲得超5個贊

正如其他人所說,'ContextMenu'不包含在可視樹中,'ElementName'綁定不起作用。如果在“DataTemplate”中未定義上下文菜單,則僅按接受的答案建議設(shè)置上下文菜單的“NameScope”。我通過使用類似于'ElementName'綁定的{x:Reference}標記擴展來解決這個問題,但繞過可視樹以不同方式解析綁定。我認為這比使用'PlacementTarget'更具可讀性。這是一個例子:


<Image Source="{Binding Image}">       

    <Image.ContextMenu>

        <ContextMenu>

            <MenuItem Header="Delete" 

                      Command="{Binding Source={x:Reference Name=Root}, Path=DataContext.RemoveImage}"

                      CommandParameter="{Binding}" />

        </ContextMenu>

    </Image.ContextMenu>

</Image>

根據(jù)MSDN文檔


x:Reference是在XAML 2009中定義的構(gòu)造。在WPF中,您可以使用XAML 2009功能,但僅適用于非WPF標記編譯的XAML。標記編譯的XAML和BAML形式的XAML目前不支持XAML 2009語言關(guān)鍵字和功能。


無論那意味著什么......但對我而言。


查看完整回答
反對 回復(fù) 2019-09-02
?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

這是另一個僅限xaml的解決方法。(這也假設(shè)你想要DataContext中的內(nèi)容,例如,你是MVVM的)


選項一,其中ContextMenu的父元素不在DataTemplate中:


Command="{Binding PlacementTarget.DataContext.MyCommand, 

         RelativeSource={RelativeSource AncestorType=ContextMenu}}"

這對OP的問題很有用。如果您在DataTemplate中,這將不起作用。在這些情況下,DataContext通常是集合中的眾多元素之一,并且您希望綁定的ICommand是同一ViewModel(例如Window 的DataContext)中集合的兄弟屬性。


在這些情況下,您可以利用Tag暫時保存包含集合和ICommand 的父DataContext:


class ViewModel

{

    public ObservableCollection<Derp> Derps { get;set;}

    public ICommand DeleteDerp {get; set;}

并在xaml


<!-- ItemsSource binds to Derps in the DataContext -->

<StackPanel

    Tag="{Binding DataContext, ElementName=root}">

    <StackPanel.ContextMenu>

        <ContextMenu>

            <MenuItem

                Header="Derp"                       

                Command="{Binding PlacementTarget.Tag.DeleteDerp, 

                RelativeSource={RelativeSource 

                                    AncestorType=ContextMenu}}"

                CommandParameter="{Binding PlacementTarget.DataContext, 

                RelativeSource={RelativeSource AncestorType=ContextMenu}}">

            </MenuItem>


查看完整回答
反對 回復(fù) 2019-09-02
  • 3 回答
  • 0 關(guān)注
  • 693 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號