在ClickBoxItem中将Click事件附加到Button的Context MenuItem

时间:2016-10-11 16:47:23

标签: c# wpf

我正在尝试创建一个像chrome这样的下载栏。

Valid 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)一侧,但我也忘记了要指向的上下文。为此,我使用常规Click事件替换了caliburn的click事件。 SelectedItem和SelectedItems分别为null或空。

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

1 个答案:

答案 0 :(得分:1)

尚未经过测试,但沿着这些方向的某些内容应该打开右侧或左侧的上下文菜单:

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
        ...
    }
}

至于代码隐藏,以下是我在上次拖船时遇到的类似问题:

{{1}}

让我知道这些对你有用吗<​​/ p>