- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将 Microsoft 的 RibbonControlLibrary 用于带有多个 RibbonCommand 的功能区菜单。我有一个 TabControl,它应该包含按下的每个功能区按钮的选项卡。例如。我单击 RibbonCommand 2,我想创建一个名为“Tab2”的选项卡,如果它还没有出现在 TabControl 中,否则它应该被聚焦。
我已经实现了 http://www.codeproject.com/KB/WPF/WpfTabCloseButton.aspx , 非常好。
我想我还是不太了解 WPF 的事件机制。我的代码强烈适应了 Ribboncontrol 的示例项目。
这就是我执行命令的方式:
<Window.CommandBindings>
<CommandBinding Command="me:AppCommands.Protokoll" Executed="RibbonButton_Click" />
</Window.CommandBindings>
RibbonControl 中的按钮如下所示。
<r:RibbonButton Command="me:AppCommands.Protokoll" />
AppCommands.cs
public class AppCommands
{
public static RibbonCommand Protokoll
{
get { return (RibbonCommand)Application.Current.Resources["ProtokollCommand"]; }
}
}
资源字典:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary">
<r:RibbonCommand x:Key="ProtokollCommand"
LabelTitle="foo"
ToolTipTitle="foo"
ToolTipDescription="foo" />
</ResourceDictionary>
我现在想写的是一个为每次按钮点击创建一个标签的方法,因为创建的标签页包含特定的用户控件。我不知道如何最好地实现命令按钮和选项卡之间的映射。我认为最好只使用一个单击事件处理程序,而不是为每个按钮使用一个事件处理程序。问题:
1) 我如何找出触发事件的唯一按钮?我只设法获得 ResourceDictionary 中的信息。不幸的是,没有 uniqueID 之类的属性。我已经这样做了:
private void RibbonButton_Click(object sender, RoutedEventArgs e)
{
// ((Microsoft.Windows.Controls.Ribbon.RibbonCommand)(((System.Windows.Controls.Button)(e.OriginalSource)).Command))
}
我不想基于应该显示的 LabelTitle 等属性创建映射。
2)我找到了这个 WPF/C#: How does one reference TabItems inside a TabControl?它向我展示了如何查询 TabControl 的 Items 集合。这是一个好的尝试还是有更好的尝试?
3)
我应该如何创建 RibbonCommand 和应该显示的 TabPage + 控件之间的映射。当然我可以使用像这样的字典
Dictionary<String, fooContainer>
// ...
public class fooContainer()
{
public String TabHeaderString {get;set;}
// other properties
}
或者 WPF 是否提供了一种更好的方法来处理这些 ResourceDictionaries,直到现在我还没有理解。
最佳答案
由于您使用 Command
来管理选项卡,我想您可以以有意义的方式设置每个 Button
的 CommandParameter
属性, 这样就可以区分您需要实现的不同操作(即它可以是一个 Enum
,如果您已经知道您需要公开的选项卡类型,或者是一个更复杂的对象如果可以动态创建此类选项卡)。
顺便说一下,RibbonButton_Click
方法的签名在我看来不正确,因为传递给该方法的参数应该是 ExecutedRoutedEventHandler
类型。这样做将允许您通过 args
的 Parameter
属性访问在 Button
级别指定的 CommandParameter
多变的。按照代码修改:
1. 将适当的CommandParameter
添加到您的RibbonButton
<r:RibbonButton Command="me:AppCommands.Protokoll" CommandParameter="TabKind.Sample1"/>
<r:RibbonButton Command="me:AppCommands.Protokoll" CommandParameter="TabKind.Sample2"/>
2. 将处理程序更改为Execute
事件,以匹配适当的签名,并根据需要处理参数
private void RibbonButton_Click(object sender, ExecutedRoutedEventArgs e)
{
TabKind kind = (TabKind)e.Parameter;
switch (kind)
{
case TabKind.Sample1:
{
//Do something meaningful...
break;
}
case TabKind.Sample2:
{
//Do something meaningful...
break;
}
}
}
直接回答你的问题:
1. 您不需要知道哪个按钮实例触发了Command
,正确的方法是使用CommandParameter
确定您要执行哪种操作(RibbonButton
只是 Command
的宿主,对我来说设计应用程序的逻辑没有意义具体的 UI 实现)。
2. 如果您确实需要查询 TacControl
的 TabItem
子项,您提供的链接当然是最佳选择.
3.一旦确定了需要执行的操作,就可以通过之前创建的寄存器检索所需的 TabItem
实例(即,您可以有一个适当的 Dictionary
用于将 Enum
值与 TabItem
实例相关联)。另一种可能的方法是在每个 TabItem
上使用 Tag
属性,将其设置为适当的 Enum
值并使用以下方法检索正确的 TabItem
(注意 kind
是前面代码段中定义的变量):
TabItem matchingItem = tab_main.Items.Cast<TabItem>()
.Where(item => item.Tag == kind)
.FirstOrDefault();
关于c# - 如何将 RibbonControlLibrary 功能区事件机制与 TabControl 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222655/
如何在 WPF 的功能区中隐藏快速访问工具栏? 最佳答案 对于 Microsoft Ribbon for WPF ,您可以使用 VisualTreeHelper 隐藏它.关于 Loaded事件处理程序
我尝试做一个功能区工具栏。我的问题是它没有找到 ImageSource。这是我的简单代码:
如何尽可能快速、简单地添加自定义宏 XLAM 文件? 我有一个保存为 XLAM 文件的宏。我希望我工作的其他不懂 Excel 的人员能够下载 XLAM 文件,像使用任何其他加载项(例如 Solver)
我在带有 EditBox 的 excel 功能区上有一个自定义选项卡。用户应在 EditBox 中输入 100 到 200 之间的数字。如果用户输入除此之外的任何内容,则应弹出错误消息,并且 Edit
我想在 ggplot2 中绘制一个图 多行, 每个都有一个环绕的丝带, 用户指定颜色, 并带有显示线条颜色和色带颜色的图例。 (向下滚动以查看几乎实现我所寻求的情节的示例。) 我看过相关的问题,但没有
.xlsm > customUI > customUI.xml 当我为下面的菜单元素使用 size="large"时,我看到带有大图标的按钮。 但是当我将属性 size="large"的按钮放在菜单
我正在开发 PowerPoint 加载项,并希望在加载项应用程序运行时暂时禁用某些功能区控件。 我开发了一个解决方案,可以在启用加载项时按预期工作,但这还不够,因为它禁用了一些常用的控件,如 Slid
如何为 Excel 功能区中的每个组合框项目设置 ID? 下面的代码是我为每个项目设置文本(标签)的地方,我想为每个项目设置一个 ID,以便以后识别它。我怎样才能做到这一点? Private Sub
我有一个应用程序,我是第一次在其中使用功能区。我可以填充自己的控件并使子例程的回调没有问题。我现在正处于开发阶段,我希望动态隐藏/显示一些组以提供更好的用户体验。 我可以通过更改 CallbackGe
我正在为 Office(2007 年和 2010 年)编写一个插件,到目前为止,我已经使用 Fluent Ribbon XML 来自定义不同的功能区。 我现在使用这种方法时遇到的问题是,我想在我的代码
我刚开始玩 Microsoft 的 08/2010 WPF Ribbon发布。基础知识看起来非常简单,但我如何创建一个 RibbonToggleButton 组,一次只允许选择组中的一个按钮,类似于单
我引用CSS3-Tricks Ribbon tutorial的教程. 我想用 CSS3 调整表格内的第 th 元素,使其看起来像教程中的功能区。 我设置了一个 JSFiddle测试它,但不幸的是我做不
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎是题外话,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或include a mi
我正在设计一个网站,该网站的左上角悬挂着一条 CSS 丝带。当我将图像放在色带下方时,色带会与图像重叠,这就是我想要的外观。 但是,当我实现 J-Query 幻灯片放映技术时,会发生以下情况。 我的问
我试图在 Div 的右上角放置一个“三 Angular 形”。不知何故,我每次都搞砸了。 That's the Fiddle 那是我的 div: Test Module
我是 VSTO 的新手,我正在尝试创建一个带有一些简单控件的 Excel 功能区。我知道在 Visual Studio 中有两种方法可以做到这一点。功能区 XML 和功能区设计器,据我所知,大多数人更
我听说 Microsoft 允许使用商用 Office UI 控件,但竞争产品除外,例如文字处理器或电子表格应用等。 这有多真实? 此外,如果这不是真的,您是否知道任何免费功能区控件? 最佳答案 你应
如何更改 WPF 功能区 ApplicationMenu 中 AuxilaryPane 的大小?我已将最近的文件列表添加到该区域,但它被截断了。理想情况下,我希望辅助 Pane 像 Word/Exce
我正在学习 Micronaut 框架。我的 gradle.build 文件 dependencies { annotationProcessor "io.micronaut:micronaut-inj
我正在考虑在我的一个应用程序中实现功能区 GUI,当然希望遵守 MS 指南,因此感觉就像一个普通的功能区,等等。但我正在尝试找出解决特定问题的方法动态改变功能区。 我正在创建一个概念游戏编辑器,请不要
我是一名优秀的程序员,十分优秀!