日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF中 ContextMenu 寻找父物体的一种方案

發布時間:2023/12/29 asp.net 25 coder
生活随笔 收集整理的這篇文章主要介紹了 WPF中 ContextMenu 寻找父物体的一种方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

據了解 ContextMenu 在WPF中實際是以類似于WIndow的呈現方式,所以 ContextMenu 在當前頁面的 Visualtree 中是找不到的。
當在Listbox中需要傳遞當前選中項給ContextMenu時,需要以特殊手法傳遞。

前臺XAML代碼
 <Grid>
     <Grid.RowDefinitions>
         <RowDefinition />
         <RowDefinition Height="auto" />
     </Grid.RowDefinitions>
     <Grid.ContextMenu>
         <ContextMenu>
             <MenuItem Command="{Binding Data.DeleteFileCommand, Source={StaticResource proxy}}" Header="Delete" />
             <MenuItem Command="{Binding RenameFileCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.PlacementTarget}" Header="Rename" />
             <!--  {Binding ElementName=listbox} cannot find  -->
             <MenuItem Command="{Binding OpenFilePathCommand}" Header="Open File Path" />
         </ContextMenu>
     </Grid.ContextMenu>
</Grid>

在這里通過指定ElementName的方式并不生效,因為這兩個不在同一Visualtree下,雖然寫的時候不報錯,但是運行后就會報錯。(在新版MAUI上寫的時候就會報錯)

RelativeSource的用法如下:RelativeSource

MenuItem 通過 RelativeSource 綁定到自身的父物體中的PlacementTarget屬性(注意此時并沒有代碼提示可以自動完成),然后在后臺就可以通過Command的參數接受前臺父物體,此處演示為Grid對象;

后臺C#代碼

 [RelayCommand]
 private void RenameFile(object obj)
 {
     var parent = obj as Grid;
     var txb = parent.FindName("txb1") as TextBox;
     if (txb != null)
     {
         IsEditFileName = true;
         txb.LostFocus += Txb_LostFocus;
         var res = txb.Focus();
     }
 }

完整示例可參考
https://github.com/KleinPan/One

總結

以上是生活随笔為你收集整理的WPF中 ContextMenu 寻找父物体的一种方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。