Ank*_*kar 11 c# wpf ribboncontrolslibrary
如果我有绑定的集合,如何添加快速访问项容器默认为RibbonLibrary.它的抛出操作在ItemSource正在使用时无效,而我是从UI添加快速访问工具项.
<r:Ribbon Name="ribbon">
<r:Ribbon.QuickAccessToolBar>
<r:RibbonQuickAccessToolBar ItemsSource ="{Binding QuickMenuItems, Mode=OneWay}">
<r:RibbonQuickAccessToolBar.ItemTemplate>
<DataTemplate>
<StackPanel>
<r:RibbonButton QuickAccessToolBarId="{Binding RibbonId}" Label="{Binding Label}" SmallImageSource="{Binding ImageUri}" Command="{Binding Command}"/>
</StackPanel>
</DataTemplate>
</r:RibbonQuickAccessToolBar.ItemTemplate>
</r:RibbonQuickAccessToolBar>
</r:Ribbon.QuickAccessToolBar>
<r:RibbonTab Header="Home">
<r:RibbonGroup x:Name="Clipboard" ItemsSource ="{Binding MenuItems, Mode=OneWay}" >
<r:RibbonGroup.ItemTemplate>
<DataTemplate>
<StackPanel>
<r:RibbonButton QuickAccessToolBarId="{Binding RibbonId}" Label="{Binding Label}" SmallImageSource="{Binding ImageUri}" Command="{Binding Command}"/>
</StackPanel>
</DataTemplate>
</r:RibbonGroup.ItemTemplate>
</r:RibbonGroup>
</r:RibbonTab>
</r:Ribbon>
ObservableCollection<RibbonItem> _MenuItems;
ObservableCollection<RibbonItem> _QuickMenuItems;
public ObservableCollection<RibbonItem> MenuItems
{
get { return _MenuItems; }
}
public ObservableCollection<RibbonItem> QuickMenuItems
{
get { return _QuickMenuItems; }
}
public class RibbonItem
{
public RibbonItem(string label, string imageUri, ICommand command, string ribbonId)
{
Label = label;
ImageUri = imageUri;
Command = command;
}
public string Label { get; private set; }
public string ImageUri { get; private set; }
public ICommand Command { get; private set; }
public string RibbonId { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
错误的同时
这将允许您从功能区控件和 ViewModel 添加快速菜单项。我使用 aListBox作为 ViewModel 和RibbonQuickAccessToolBar. 当项目添加到 时ListBox,视图会将它们添加到RibbonQuickAccessToolBar。
创建一个折叠的ListBox,它将绑定到 ViewModel 中的集合并删除ItemsSource的绑定RibbonQuickAccessToolBar:
<ListBox ItemsSource="{Binding QuickMenuItems, Mode=OneWay}"
x:Name="ProxyListBox"
Visibility="Collapsed"/>
<ribbon:Ribbon Name="ribbon">
<ribbon:Ribbon.QuickAccessToolBar>
<ribbon:RibbonQuickAccessToolBar x:Name="QuickAccessToolBar" DataContextChanged="QuickAccessToolBar_OnDataContextChanged">
<ribbon:RibbonQuickAccessToolBar.ItemTemplate>
<DataTemplate>
<StackPanel>
<ribbon:RibbonButton QuickAccessToolBarId="{Binding RibbonId}" Label="{Binding Label}" SmallImageSource="{Binding ImageUri}" Command="{Binding Command}"/>
</StackPanel>
</DataTemplate>
</ribbon:RibbonQuickAccessToolBar.ItemTemplate>
</ribbon:RibbonQuickAccessToolBar>
</ribbon:Ribbon.QuickAccessToolBar>
<ribbon:RibbonTab Header="Home">
<ribbon:RibbonGroup x:Name="Clipboard" ItemsSource ="{Binding MenuItems, Mode=OneWay}" >
<ribbon:RibbonGroup.ItemTemplate>
<DataTemplate>
<StackPanel>
<ribbon:RibbonButton QuickAccessToolBarId="{Binding RibbonId}" Label="{Binding Label}" SmallImageSource="{Binding ImageUri}" Command="{Binding Command}"/>
</StackPanel>
</DataTemplate>
</ribbon:RibbonGroup.ItemTemplate>
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
</ribbon:Ribbon>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中,使用 ListBox 的 DataContextChanged 为 ListBox.ItemsSource 的 CollectionChanged 事件附加事件处理程序:
private void ProxyListBox_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
{
foreach (var newItem in e.NewItems)
{
QuickAccessToolBar.Items.Add(newItem);
}
}
if (e.OldItems != null)
{
foreach (var oldItem in e.OldItems)
{
QuickAccessToolBar.Items.Remove(oldItem);
}
}
}
private void QuickAccessToolBar_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
((INotifyCollectionChanged)ProxyListBox.Items).CollectionChanged += ProxyListBox_CollectionChanged;
}
Run Code Online (Sandbox Code Playgroud)
ViewModel 与之前相同:
class RibbonViewModel
{
ObservableCollection<RibbonItem> _MenuItems;
ObservableCollection<RibbonItem> _QuickMenuItems;
public ObservableCollection<RibbonItem> MenuItems
{
get { return _MenuItems; }
}
public ObservableCollection<RibbonItem> QuickMenuItems
{
get { return _QuickMenuItems; }
}
public RibbonViewModel()
{
_QuickMenuItems = new ObservableCollection<RibbonItem>();
_MenuItems = new ObservableCollection<RibbonItem>();
}
public class RibbonItem
{
public RibbonItem(string label, string imageUri, ICommand command)
{
Label = label;
ImageUri = imageUri;
Command = command;
}
public string Label { get; private set; }
public string ImageUri { get; private set; }
public ICommand Command { get; private set; }
public string RibbonId { get; private set; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |