簡體   English   中英

在ListBoxItem中將Click事件附加到按鈕的上下文MenuItem

[英]Attaching Click Event To Button's Context MenuItem Within ListBoxItem

我正在嘗試創建一個像chrome這樣的下載欄。

有效的XHTML

我當前遇到的問題是嘗試將click事件綁定到listboxitem中按鈕的上下文菜單。 單擊上下文菜單項時,表示未找到該動作。

<ControlTemplate TargetType="{x:Type ListBoxItem}">
    <Button BorderBrush="Transparent" BorderThickness="0" telerik:StyleManager.Theme="Windows8" Click="ButtonBase_OnClick">
        <StackPanel Name="Panel" SnapsToDevicePixels="True" 
                Orientation="Horizontal" Margin="1 0"
                Height="30">

            <ContentControl Margin="0 0 10 0" Height="20">
                <ContentControl.Style>
                    <Style TargetType="ContentControl">
                        <Setter Property="ContentTemplate" Value="{StaticResource Icons.File}"></Setter>                            
                    </Style>
                </ContentControl.Style>
            </ContentControl>

            <TextBlock Foreground="Black" Text="{Binding FileName}"  
                    VerticalAlignment="Center" 
                    TextAlignment="Center"
                    Margin="1 0 0 0"/>

            <Button x:Name="ExpandButton" Background="Transparent" Click="ExpandButton_OnClick" BorderThickness="0" VerticalAlignment="Center" ContextMenuService.IsEnabled="false">
                <Button.ContextMenu>
                    <ContextMenu x:Name="popup">
                        <MenuItem  Header="Open" cal:Message.Attach="[Click] = [Open($this)]"></MenuItem>
                    </ContextMenu>
                </Button.ContextMenu>
                <ContentControl ContentTemplate="{StaticResource Icons.ArrowUp}" Width="10" Height="10" Margin="2" VerticalAlignment="Center"/>
            </Button>
            <Rectangle Width="2" Fill="Gray" Margin="0 0 0 0"/>
        </StackPanel>
    </Button>
</ControlTemplate>

我可以將其綁定在應用程序的代碼(xaml.cs)后面,但是我也無法跟蹤上下文應該指向的項目。 為此,我將caliburn的click事件替換為常規的Click事件。 SelectedItem和SelectedItems分別為null或為空。

private void MenuItem_OnClick(object sender, RoutedEventArgs e)
{
    var originalSource = e.OriginalSource;
    var selectedItem = FileListBox.SelectedItem;
    var SelectedItems = FileListBox.SelectedItems;
}

尚未測試,但應遵循以下步驟打開鼠標右鍵或鼠標左鍵的上下文菜單:

<Button x:Name="ExpandButton" Background="Transparent" Click="ContextMenu_Click" BorderThickness="0" VerticalAlignment="Center" ContextMenuService.IsEnabled="false">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <EventTrigger RoutedEvent="Click">
                    <EventTrigger.Actions>
                        <BeginStoryboard>
                            <Storyboard>
                                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
                                    <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
                                </BooleanAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger.Actions>
                </EventTrigger>
            </Style.Triggers>
            <Setter Property="ContextMenu">
                <Setter.Value>
                    <ContextMenu x:Name="popup" MenuItem.Click="menuItem_Click">
                        <MenuItem  Header="Open" cal:Message.Attach="[Click] = [Open($this)]"></MenuItem>
                    </ContextMenu>
                </Setter.Value>
            </Setter>
        </Style>
    </Button.Style>
    <ContentControl ContentTemplate="{StaticResource Icons.ArrowUp}" Width="10" Height="10" Margin="2" VerticalAlignment="Center"/>
</Button>

至於后面的代碼,在我的上一次拖船中,以下內容為我解決了類似的問題:

DependencyObject mainDep = new DependencyObject();

private void ContextMenu_Click(object sender, RoutedEventArgs e)
{
    DependencyObject dep = (DependencyObject)e.OriginalSource;

    while ((dep != null) && !(dep is ListBoxItem))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }
    mainDep = dep;
}
private void menuItem_Click(object sender, RoutedEventArgs e)
{
    DependencyObject dep = mainDep;

    if (dep is ListBoxItem)
    {
        ...
           DO your stuff here
        ...
    }
}

讓我知道這些如何為您服務

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM