none
WPF RibbonSpliteButton 获取选中项 RRS feed

  • 问题

  •  <ribbon:RibbonSplitButton x:Name="CategoryListBtn" ItemsSource="{Binding}" Click="CategoryListBtn_Click" LargeImageSource="/Images/Icons/category.png" SmallImageSource="/Images/Icons/addcategory.png" Label="类别" FontSize="13" MaxWidth="40" ToolTipTitle="根据类别查看" ToolTipDescription="查看在选中类别的所有邮件">
      <ribbon:RibbonSplitButton.ItemContainerStyle>
        <Style TargetType="{x:Type ribbon:RibbonMenuItem}">
             <Setter Property="Header" Value="{Binding Name}"/>
              <Setter Property="IsCheckable" Value="True"/>
        </Style>
      </ribbon:RibbonSplitButton.ItemContainerStyle>
    </ribbon:RibbonSplitButton>
    我在RibbonSpliteButton 下添加了一个RibbonMenuItem的列表,这个MenuItem是可以选中多项的。我想问在后台如何获取选中的项。
    2012年9月3日 2:42

答案

  • 可以简单地通过Binding的ItemsSource处理该问题:

    向ItemsSource中的项增加属性Checked,然后在ribbon:RibbonSplitButton.ItemContainerStyle中增加一个Setter:

    <Setter Property="IsChecked" Value="{Binding Checked}" />


    Wanpeng wanpeng.ones@gmail.com

    • 已标记为答案 林志霄 2012年9月5日 3:38
    2012年9月3日 6:40

全部回复

  • 可以简单地通过Binding的ItemsSource处理该问题:

    向ItemsSource中的项增加属性Checked,然后在ribbon:RibbonSplitButton.ItemContainerStyle中增加一个Setter:

    <Setter Property="IsChecked" Value="{Binding Checked}" />


    Wanpeng wanpeng.ones@gmail.com

    • 已标记为答案 林志霄 2012年9月5日 3:38
    2012年9月3日 6:40
  • 可以简单地通过Binding的ItemsSource处理该问题:

    向ItemsSource中的项增加属性Checked,然后在ribbon:RibbonSplitButton.ItemContainerStyle中增加一个Setter:

    <Setter Property="IsChecked" Value="{Binding Checked}" />


    Wanpeng wanpeng.ones@gmail.com

    你好,谢谢你的回答。我的source是用linq to sql 读出来的,貌似没法添加一个Checked属性。我想可以在读取出来后将读取出来的每个项包裹在另外一个实体类中(在这个实体类中填上Checked属性),或者说有什么其他的解决方法么?
    2012年9月3日 8:26
  • 这是一个使用View获取对象的方法,处理了DropDownClosed事件:

            private void SplitButton_DropDownClosed(object sender, EventArgs e) {
                int cnt = splitButton.Items.Count;
                for (int i = 0; i < cnt; ++i) {
                    RibbonMenuItem item = (RibbonMenuItem)splitButton.ItemContainerGenerator.ContainerFromIndex(i);
                    if (item.IsChecked == true) {
                        // to do
                    }
                }
            }
    当然,我还是建议之前说的在实体上处理,从逻辑和维护上都更好。


    Wanpeng wanpeng.ones@gmail.com

    2012年9月4日 3:47
  • 谢谢回答,我已经使用了你之前说得在实体上处理的方法。再次谢谢你。
    2012年9月5日 3:38