Tag: resourcedictionary

在运行时切换wpf资源字典

我正在尝试构建一个允许用户在运行时更改主题的wpf应用程序。 到目前为止我所做的是创建一个resourcedictionary,其中包含在其中定义的应用程序的所有颜色,然后我绑定到xaml中的这个字典。 下面是我切换资源字典的代码: if (System.IO.File.Exists(fileName)) { using (FileStream fs = new FileStream(fileName, FileMode.Open)) { ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(fs); Resources.MergedDictionaries.Clear(); Resources.MergedDictionaries.Add(dic); } } 这段代码运行正常,我知道它正在切换资源字典,但它不会更新已经显示在屏幕上的元素。 我的问题是:我如何刷新或重新绑定屏幕以考虑新的资源字典? 谢谢 SM

有没有办法在WPF控件库中使用StaticResource并能够在设计时查看?

我有一个WPF控件库,正在添加到Windows窗体应用程序。 我们希望允许控件可以本地化,但是我不知道如何在不重复代码的情况下完全实现这一点。 这就是我现在正在做的事情 。 基本上,在Windows窗体应用程序中,在主应用程序启动之前,我正在实例化一个存在于窗体应用程序中的App.xaml(包含我的资源的链接,它们也存在于窗体应用程序中)。 这适用于运行时。 但是,我的用户控件都有Content=”{StaticResource SomeVariableName}” ,最终为空。 我可以通过在我的控件库中使用app.xaml和相应的资源字典来匹配我的Windows窗体应用程序中的字典来解决这个问题。 但是,这是重复的代码。 我已经尝试过的事情无济于事: 从我的表单应用程序中实例化位于用户控件库中的App.xaml。 这不起作用,因为我的资源的URI正在寻找嵌入式资源,而不是我的本地资源字典(我可以简单地将资源文件从控件复制到构建中的表单应用程序中的适当位置)。 我可以在这里利用DeferrableContent吗? 尽管如此,据我所知,这个属性并没有太多在线以及如何使用它。 我想对App和词典使用post构建,但是,就我所知,App实例化是对已编译的App.xaml的静态引用。 因此,App.xaml必须至少存在于表单中 我确实尝试了一个重复的App.xaml,后期构建移动了resourcedictionary.xaml。 我认为重复的app.xaml是可以的,因为这是驱动力,你可能不想依赖于控件中的一个(它回转并让你想知道你是否应该在控件中有App.xaml所有?除非你想允许使用嵌入式资源的默认值….)即使它被放置在URI本应指向的位置,它也无法找到资源。 反编译的代码指向Uri resourceLocater = new Uri(“/WindowsFormsApplication3;component/app.xaml”, UriKind.Relative); 那么,有没有办法让它工作并且设计时间查看组件默认值并避免重复? 或者,在这种情况下复制是否正常? 如果我的第二个子弹的子项似乎没问题(复制App.xaml与构建复制资源),如何使它不查找组件级项目,而是查找文件级别? 我刚刚注意到的最后一个问题(我可以在必要时单独发布)。 我的App.xaml正在内置到代码中,因此无论如何都不允许我动态创建新的ResourceDictionaries。 有没有办法做到这一点? 最后的选择……可能是最好的选择? – 无论如何我打算使用Andre van Heerwaarde的代码 ,所以我应该检查文件是否存在并将其作为合并资源即时添加? 基本上,我的用户控件中有一个App.xaml链接到默认的嵌入式ResourceDictionary。 然后,让代码在运行中寻找适当的本地化资源,这可能是相对文件路径? 我在这里看到的唯一缺点是默认情况下无法动态改变…我甚至可以在指定的地方看到(使用某种约定)并且优先于内置的? 哦,我不想要嵌入式资源的原因是最终用户可以在部署构建之后添加/修改新的本地化资源。 我可以添加代码,如果它可以帮助您更好地可视化,请告诉我。 UPDATE 我现在遇到了造型的另一个问题,而不仅仅是本地化。 以下是其中一个控件上的一个内部按钮的示例: <Button Style="{StaticResource GrayButton}" 我尝试/想过的更多事情: 我无法创建一个app.xaml(永远不会被使用)与ResourceDictionary设置为ApplicationDefinitions不允许在库项目中。 我可以将它嵌入控件的资源中,但随后它总是优先于任何应用程序级资源,并且我失去了可自定义性。 这是一个实际上听起来像我正在寻找的连接案例 ,但它没有提供任何真正的解决方案 我能想到的解决方案(超出顶部…不起作用)可能会起作用(并且尚未尝试),对于我认为应该简单的事情,似乎也有很多工作要做。 […]

参考资料中ImageSource的System.Drawing.Image

我的问题与这个问题非常相似: wpf图像资源和运行时wpf控件中的图像更改 ,但略有不同。 这是我的ResourceDictionary.xaml: Images/disconnect.png Images/tick.png Images/x.png 至于后面的C#代码,我可以使用以下内容从资源加载ImageSource。 在其中,我能够看到元数据和图像名称,但无法弄清楚如何将其放入System.Drawings.Image中。 var imageSource = (ImageSource)Application.Current.FindResource(“Synced”); System.Drawing.Image img = Image.FromFile(???) 我试图将其转换为System.Drawing.Image的原因是将其发送到打印机。 谢谢!

条件资源创建WPF XAML设计/运行时

关于WPF级联绑定的第一个问题, 我注意到我在MainWindow和UserControls中定义了比预期更多的资源 : 这在Snoop中很常见 MainWindow XAML有一个MainWindow ViewModel的“实例”,用绿色和蓝色绘制2个用户控件 另外,2个UserControl中的每一个都有2个usercontrol视图模型的实例,它们将内部圆圈涂成红色 我在Usercontrol中的第一个意图是能够看到“ 实时 ”我的控件的样子(我把它涂成红色以区分这个“模型”与主窗口中的绿色和蓝色圆圈) 我的资源创建非常便宜,所以无论我是否有2个额外的资源仍然存在于我的应用程序中,但我预计我的资源将更昂贵的时间… 最后我的问题是: 我怎样才能在“低级”控件中创建资源(这样我可以在控件的视图中进行预览) 但在运行完整的应用程序(或主窗口的视图)时阻止这种创建,因为我会绑定到此上一级的资源。 提前谢谢了。 最好的祝福。 NGI

与资源字典共享项目(xaml)

我正在寻找一种在项目之间共享ResourceDictionary的方法。 向共享项目添加新项目不提供资源字典。 它可以在其他(主)项目中创建并拖动。 但后来我无法将其构建选项更改为Page : 想法是加载这样的资源字典 var dictionary = new ResourceDictionary(); dictionary.Source = new Uri(“/WpfApplication91;component/Dictionary2.xaml”, UriKind.Relative); 这显然是失败的 PresentationFramework.dll中出现“System.IO.IOException”类型的exception,但未在用户代码中处理 附加信息:找不到资源’dictionary2.xaml’。 有任何想法吗?

从WPF UserControl访问ResourceDictionary

我正试图通过C#访问UserControl代码隐藏中的资源字典,但我收效甚微。 合并词典: 嵌入字典: /Resources/Images/default_thumb.png /Resources/Images/disconnect_thumb.png /Resources/Images/failed_thumb.png /Resources/Images/success_thumb.png 代码背后: var resourceDictionary = new ResourceDictionary(); resourceDictionary.Source = new Uri(“/Resources/BiometricDictionary.xaml”, UriKind.Relative); 我已经尝试了所有的例子和有用的提示,但很快就会出现。 现在,成功将是加载字典的能力。 有什么建议?

XML名称空间中不存在标记

这个错误似乎遍布整个地方,但每个人似乎都有自己的解决方案,其中没有一个解决了我的问题。 我收到的资源字典出错(后来合并)XML名称空间’clr-namespace:Company.Project.Module.Folder; assembly = Company.Project.Module’中不存在标签’ModelBindings’ 我引用的程序集是自定义的,包含在解决方案中。 不仅如此,我们已经查看了放入资源字典所在项目的bin中的dll,并且在检查之后它包含了我想要引用的类。 所以我知道1. dll是在正确的位置被访问并且在引用中。 2. dll包含我想要的数据。 以下是资源字典的一些代码 命名空间的列表 xmlns:modulemodel=”clr-namespace:Company.Project.Module.Folder;assembly=Company.Project.Module” 创建要引用的资源 就像其他人的错误一样,intellisense说它是犹太教徒。 此外,xmlns列表是使用intellisense的自动完成function创建的,并手动重新输入。 都没有奏效。 我也尝试将所有内容移动到app.xaml,它仍然给了我同样的错误。 如果我删除ResourceDictionary文件的主体,代码编译正常,但所有绑定都被破坏。 最后,所有资源定义过去都在使用它们的xaml文件中定义,工作正常。 它只是在我尝试从一个不起作用的不同项目创建它们之后。 我改变了这个来修复错误,回到旧方法可能会有问题。 编辑:这是我在显示我正在使用的资源字典方面能做的最好的事情 如果我用ResourceDictionary替换SharedResourceDictionary,则会发生相同的错误。 上面的app.xaml和SharedResourceDictionary在命名空间Company.Project.Main中进行了比较,并且它既引用了SharedResourceDictionary,也引用了我在上面的代码中放入的不同模块项目。 解 看起来它主要是用户错误。 但这可能发生在其他人身上。 当我从原始文件复制xmlns:moduleviewmodel定义时,我必须自己添加assembly =部分。 就像我说的那样,我自己也做了,并且使用自动填充来输入’xmlns:moduleviewmodel =’。 在我们发现错误之前,我们再次尝试了自动完成,因为我们发现7个名称空间中没有一个没有生成错误。 就在那时我注意到assembly路径上有一封信没有大写。 奇怪的是自动完成实际上自己插入了这个错误。 我们编译的时候注意到了这封错误的信件。 更奇怪的是,在我手动修复所有路径之后,我们再次尝试了自动完成,并且拼写正确。 我不知道错误的自动完成的原因,但固定的字母,它编译得很好。 现在我只是想知道是否有人会相信自动完成function正在改变我!

WPF VS2013:查找资源字典时发生错误

球队, 我在Visual Studio 2013中有一个简单的wpf项目。结构如下所示。 错误所说的全部内容如标题“查找资源字典时发生错误”所示。 我已经从网上尝试了很多建议并且没有耐心。 每件事似乎都没问题。 任何有经验的人都可以提出一些建议。 提前致谢。

从ResourceDictionary设置WindowStartupLocation会抛出XamlParseException

当我尝试通过ResourceDictionary的Setter设置WindowStartupLocation属性时,我得到一个XamlParseException : ‘Set property’System.Windows.Setter.Property’抛出exception。’ 行号’x’和行位置’y’。 内部exception是ArgumentNullException : 值不能为空。 参数名称:property。 我在资源字典中的风格是: 问题不在于使用ResourceDictionary ,因为当我删除WindowStartupLocation ,其他两个属性( SizeToContent和ResizeMode )在引用样式的窗口上按预期设置: 有没有人遇到过这个? 它是WPF的错误/限制吗? PS我知道这个问题类似于资源字典中的Window Startup Location ,但在另一个问题中没有提供足够的信息,后来仍未解决。

从其他Assembly实例化ResourceDictionary xaml

我在包含颜色和画笔的WPF类库中定义了一个Reource Dictionary,名为BrushResources.xaml。 我想在另一个程序集的代码中使用一些Brushes,它引用了这个库项目。 如何获得它的ResourceDictionary实例?