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

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

在 ListBoxItem DataTemplate - WPF 內(nèi)的嵌套控件中處理相同的單擊事件

在 ListBoxItem DataTemplate - WPF 內(nèi)的嵌套控件中處理相同的單擊事件

C#
繁花不似錦 2022-12-24 12:19:54
當我們有一個自定義列表框時,它為鼠標左鍵單擊定義了事件處理,并且在 ListBoxItem 數(shù)據(jù)模板中還有一個附加形狀,當它被單擊時需要執(zhí)行一些操作,我們?nèi)绾翁幚磉@些我有一個 Custom ListBox 女巫試圖處理 Click 事件:在內(nèi)容視圖中:                <ABC:AListBox                    ClickCommand="{Binding LaunchCommand}"                    ...>                </ABC:AListBox>在它的數(shù)據(jù)模板中,我們有這個:        <DataTemplate x:Key="ThisListTemplate">            <StackPanel ...>                <Border Grid.Column="1" VerticalAlignment="Center">                    <TextBlock                        FontSize="15"                        Foreground="White"                        Text="{Binding Path=ItemTitle}" />                      </Border>                <Canvas Height ="12" Width ="12" >                  <Ellipse Name = "TheEllipse" Stroke="Black" Height ="12"                                                             Width ="12" Cursor="Hand" Canvas.Left="185" Canvas.Top="12">                                            </Ellipse>                    <Ellipse.InputBindings>                        <MouseBinding Gesture="LeftClick"                                      Command="{Binding DataContext.LaunchFromXamlCommand , RelativeSource={RelativeSource AncestorType=ABC:AListBox}}"                                      CommandParameter="{Binding}" />                    </Ellipse.InputBindings>                                      </Canvas>             </StackPanel>                           </DataTemplate>在 MVVM 作為我們的數(shù)據(jù)上下文中,我們有:    public ICommand LaunchCommand { get; private set; }    public DelegateCommand<object> LaunchFromXamlCommand { get; private set; }在這里,除了通過模板調(diào)用的 LaunchFromXamlCommand 之外,我還使用了 2 個不同的命令 LaunchCommand 作為 ICommand。LaunchFromXamlRun將按預期正常觸發(fā)。但也正如可以猜測的那樣,將有 2 個引發(fā)的事件和 2 個命令被觸發(fā),我想省略一個并在該形狀被擊中時忽略一般的 ListBox 事件處理程序。這樣做的最佳解決方案是什么?僅供參考:( 可能不是那么重要只是為了說明)該應用程序正在使用早期版本的 Prism(不要認為這在這里很重要)并且具有模塊化代碼,所有內(nèi)容都在不同的程序集中分離并且代碼使用 MVVM 模式。我希望我們有e.handled = true一個可以在給定場景中使用的機制。
查看完整描述

1 回答

?
ITMISS

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

在列表框中使用該單擊處理程序會加劇您的問題。我不知道你是怎么做到的,但這不能只是點擊。這可能是 previewmousedown。因為,當然,作為選擇項目的一部分,列表框會“吃掉”鼠標按下。


解決此問題的一種方法是不使用該列表框預覽鼠標。在這里,我將我的行內(nèi)容放在一個按鈕中并綁定按鈕的命令。當然,它看起來不像一個按鈕。


我把圓圈做成一個按鈕,并給它一個透明的填充,這樣你就可以點擊所有的按鈕。


    <ListBox ItemsSource="{Binding People}">

        <ListBox.ItemContainerStyle>

            <Style TargetType="{x:Type ListBoxItem}">

                <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>

            </Style>

        </ListBox.ItemContainerStyle>

        <ListBox.ItemTemplate>

            <DataTemplate>

                <Button  Command="{Binding DataContext.ItemClickCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"

                         CommandParameter="{Binding}"

                         >

                    <Button.Template>

                        <ControlTemplate>

                            <StackPanel Orientation="Horizontal">

                                <TextBlock Text="{Binding LastName}"/>

                                <Button Command="{Binding DataContext.EllipseCommand, RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"

                                >

                                    <Button.Template>

                                        <ControlTemplate>

                                            <Ellipse Name = "TheEllipse" Stroke="Black" 

                                         Fill="Transparent"

                                         Height ="12"                                  

                                         Width="12" Cursor="Hand">

                                            </Ellipse>

                                        </ControlTemplate>

                                    </Button.Template>

                                </Button>


                            </StackPanel>

                        </ControlTemplate>

                    </Button.Template>

                </Button>

            </DataTemplate>

        </ListBox.ItemTemplate>

    </ListBox>

我的視圖模型使用中繼命令,但(顯然)任何 ICommand 的實現(xiàn)都可以。我有上一個問題的人,我做了一些工作。


public class MainWindowViewModel : BaseViewModel

{

    private RelayCommand ellipseCommand;

    public RelayCommand EllipseCommand

    {

        get

        {

            return ellipseCommand

            ?? (ellipseCommand = new RelayCommand(

              () =>

             {

                 Console.WriteLine("CIRCLE clicked");

             }

             ));

        }

    }

    private RelayCommand<Person> itemClickCommand;

    public RelayCommand<Person> ItemClickCommand

    {

        get

        {

            return itemClickCommand

            ?? (itemClickCommand = new RelayCommand<Person>(

              (person) =>

              {

                  Console.WriteLine($"You clicked {person.LastName}");

                  person.IsSelected = true;

              }

             ));

        }

    }

    private ObservableCollection<Person> people = new ObservableCollection<Person>();


    public ObservableCollection<Person> People

    {

        get { return people; }

        set { people = value; }

    }


    public ListCollectionView LCV { get; set; }

    public MainWindowViewModel()

    {

        People.Add(new Person { FirstName = "Chesney", LastName = "Brown" });

        People.Add(new Person { FirstName = "Gary", LastName = "Windass" });

        People.Add(new Person { FirstName = "Liz", LastName = "McDonald" });

        People.Add(new Person { FirstName = "Carla", LastName = "Connor" });

    }

}

當你點擊那個外部按鈕時,它會抓住點擊。這就是為什么我在命令中設(shè)置 IsSelected 以便通過綁定選擇您單擊的項目。


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關(guān)注
  • 121 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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