提供哈希表/字典实现,其包含WPF应用程序的组件和其他元素使用的WPF资源(例如,矢量绘图,画笔,颜色,控件模板,数据模板等)。
使用 C# 和 WinUI3,如何在 XAML 中创建可重用的弹出窗口并在多个代码隐藏中创建它的多个实例?
我有一个浮出控件,我想在多个类中重用。 我有一个浮出控件,我想在多个类中重复使用。 <CommandBarFlyout x:Name="BasicFlyout" AlwaysExpanded="True" x:Key="ImageContextMenu"> <CommandBarFlyout.SecondaryCommands> <AppBarButton x:Name="1" Label="A"/> <AppBarButton x:Name="2" Label="B"/> <AppBarButton x:Name="3" Label="C"/> <AppBarButton x:Name="4" Label="D"/> </CommandBarFlyout.SecondaryCommands> </CommandBarFlyout> 我需要为最多 120 个图像附加唯一的按钮组合,并且每个图像都有一个关联的状态类,其中包含每个按钮是否可见的布尔标志以及每个按钮的回调(将在代码隐藏。 理想情况下,它看起来像这样,尽管语法是关闭的。 CommandBarFlyout flyout = new Resources["ImageContextMenu"] as CommandBarFlyout; // Set visibility and callbacks FlyoutBase.SetAttachedFlyout(image, flyout); 问题是我不知道如何在 XAML 中声明它。看起来代码必须添加到整个项目的资源中,但我不知道该怎么做。资源字典不允许我使用 CommandBarFlyout 作为根元素。 正如你所说,资源字典似乎不允许我们使用CommandBarFlyout作为根元素。 我建议你可以尝试在StackPanel.Resources中添加CommandBarFlyout。然后你可以尝试使用 {StaticResource} 标记扩展 喜欢: <Button x:Name="myButton" Click="myButton_Click" FlyoutBase.AttachedFlyout="{StaticResource ImageContextMenu}">Click Me</Button> 或者使用 {x:Bind} 标记扩展 喜欢: <Button x:Name="myButton" Click="myButton_Click" FlyoutBase.AttachedFlyout="{x:Bind BasicFlyout}">Click Me</Button>
在 UserControl 库中使用全局 ResourceDictionary,而不在 UserControl 中引用它
我创建了一个包含多个用户控件的 WPF 类库项目。我想定义库中所有用户控件都可以共享和引用的通用样式、模板和资源...
我有一个具有以下结构的项目: 项目 ├──观点 ├ ├──仪表板.xaml ├ ├──仪表板.cs ├ ├──风格 ├──DashboardStyle.xaml 在我的 DashboardStyle.xaml 中,我有以下代码: <
有没有办法预览合并到App.xaml资源中的DynamicResources?
我在 WPF 中有一个应用程序,并创建了一个服务,将我的画笔和颜色添加到 ResourceDictionary 中,然后将此字典与 App.xaml 资源合并。这看起来像这样(显然......
我在应用程序的字典中有 4 个资源文件。每个都在同一个文件夹中,并将构建操作设置为 MauiXaml。 我在应用程序的字典中有 4 个资源文件。每个都在同一个文件夹中,并将构建操作设置为 MauiXaml。 <Application xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:CMO3" x:Class="CMO3.App"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Resources/Styles/Colors.xaml" /> <ResourceDictionary Source="Resources/Styles/CMOColors.xaml"/> <ResourceDictionary Source="Resources/Styles/Styles.xaml" /> <ResourceDictionary Source="Resources/Styles/CMOStyles.xaml" /> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> 在 Windows 上运行 .NET MAUI,我可以看到所有这些。 当我将 Visual Studio 指向我的三星 S20 FE 5G 时,同一行代码只能看到其中一个。 显示的是第一个:默认 MAUI 项目附带的 Colors.xaml。我可以自己合并所有这些,但我很困惑为什么 MergedDictionaries 不能在 Android 上运行。 约翰,我想你是说我的三星 S20 FE 5G。
我似乎无法将合并字典添加到 XAML 中的合并字典集合中。 主题.xaml 我似乎无法将合并词典添加到 XAML 中的合并词典集合中。 Theme.xaml <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Mine;component/Themes/Palette.Blue.xaml"/> <ResourceDictionary Source="/Mine;component/Themes/Template.xaml"/> </ResourceDictionary.MergedDictionaries> 应用资源 <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Mine;component/Themes/Theme.xaml"/> <!-- <ResourceDictionary Source=="/Mine;component/Themes/Palette.Blue.xaml"/> <ResourceDictionary Source="/Mine;component/Themes/Template.xaml"/> --> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> 注意:如果我将两个 ResourceDictionaries 都放在 Appication.Resources MergedDictionary 中(注释掉 theme.xaml 并取消注释其他两个词典),它们都会正确加载。但是,我们的资源定义方式,这可能意味着将加载相当多的资源,对于动态加载,我希望能够定义模板。 这是一个优化错误,请参阅此链接 关于每一个对象的创建 XAML,如果存在默认样式 (即带有 Type 键的样式) 应应用样式。尽你所能 想象有几种表现 优化(暗示) 查找尽可能轻的重量。一 其中之一就是我们不往里看 资源字典,除非它们是 标记为“包含默认值 样式”。有一个错误:如果你所有的 默认样式嵌套在 merged 中 字典深三层(或 更深)顶级词典没有 被标记以便搜索跳过它。 解决方法是设置一个默认值 对某事、任何事物的风格,在根 词典. 所以向根字典添加虚拟样式可以解决这个问题。例子 <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Mine;component/Themes/Theme.xaml"/> </ResourceDictionary.MergedDictionaries> <!-- Dummy Style, anything you won't use goes --> <Style TargetType="{x:Type Rectangle}" /> </ResourceDictionary> </Application.Resources> 您的示例代码在 Palette.Blue.xaml 的 App.xaml 合并资源字典源中有一个双等号。我假设这是您在此处发布的示例的拼写错误,而不是您真正的问题。 弄清楚如何在 XAML 中直接链接所有资源可能很棘手。最简单的方法是使用 Blend 中的资源面板。我用你的例子命名的资源文件创建了一个 Silverlight 应用程序,然后在 Blend 中打开项目并很快将它们链接在一起。 App.xaml <Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="SilverlightApplication1.App"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Theme.xaml" /> <!-- <ResourceDictionary Source="Palette.Blue.xaml"/> <ResourceDictionary Source="Template.xaml"/> --> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application> Theme.xaml <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="Palette.Blue.xaml"/> <ResourceDictionary Source="Template.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> Template.xaml <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Style TargetType="TextBox"> <Setter Property="Margin" Value="10" /> <Setter Property="Width" Value="250" /> </Style> <Style x:Key="ReadOnlyTextBoxStyle" TargetType="TextBox"> <Setter Property="IsReadOnly" Value="True" /> <Setter Property="Foreground" Value="Black" /> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Margin" Value="10" /> <Setter Property="Width" Value="250" /> </Style> </ResourceDictionary> Palette.Blue.xaml <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <SolidColorBrush x:Key="BlueSolidColorBrush" Color="SkyBlue" /> </ResourceDictionary> MainPage.xaml <UserControl x:Class="SilverlightApplication1.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel x:Name="LayoutRoot" Background="Honeydew"> <TextBox Text="Read Only Textbox" Style="{StaticResource ReadOnlyTextBoxStyle}" /> <TextBox Text="Blue Textbox" Background="{StaticResource BlueSolidColorBrush}" /> <TextBox Text="Read Only, Blue Textbox" Style="{StaticResource ReadOnlyTextBoxStyle}" Background="{StaticResource BlueSolidColorBrush}" /> </StackPanel> </UserControl> 当然,如果您链接来自不同程序集的资源,它看起来会有所不同。实际上,在那种情况下,我建议考虑在后面的代码中合并你的字典。 如果这发生在您自己的一个控件上,我发现另一种解决方案是将 DefaultStyleKey 属性设置为 null: DefaultStyleKeyProperty.OverrideMetadata(typeof(MyControl), new FrameworkPropertyMetadata(null)); 我不知道为什么这行得通,但似乎行得通!
Generic.xaml 中的 WPF StaticResourceExtension 找不到名为“x”的资源
Handycontrols WPF库提供了一个名为NumericUpDown的控件,它是一个数字字段,带有一个用于增加和减少值的按钮。 我正在制作一个源自这个 co 的控件......
使用 App.Resources 中的字符串作为 ResourceDictionary 的 Source 属性的值 {WPF}
我想在不使用资源文件 (*.resx) 的情况下在我的应用程序中实现多种语言,并且我想为此使用一个单独的 ResourceDictionary,Text/en-US.xaml。因为我想要
我想要几个不同颜色的 SolidColorBrushes,但都应该具有相同的不透明度(基于 x:Name="numCol...中转换器返回的不透明度...
我试图为CommandBar创建一个自定义的AppBarToggleButton,它将作为favoriteunfavorite按钮反应,只使用XAML ThemeResource。我想让它把图标从OutlineStart变成SolidStar......。
我试着为我的自定义控件应用新的样式,在将控件添加到UI的同时,将样式资源合并到应用程序资源中,但新的样式并没有应用到控件中。
作为这个长篇大论的解释的前奏,我看了一下现有的帖子,并没有发现我正在寻找的东西,我也google了一下这个问题,也没有发现什么 ...
当我创建一个新的WPF项目时,我可以在“添加新项”窗口中找到ResourceDictionary。但是我有另一个项目,我找不到,也不知道为什么。更新:该项目最初用于.net 3.5,...
“找不到资源” themes.xxx.xaml””运行时错误-另一个程序集中的WPF自定义组件
我正在尝试使用在WPF项目的一个类库程序集中创建的自定义控件。但是,当我...
我正在使用WPF类库,而不是应用程序。这是我在c#中制作的Label的示例,我想使用XAML对其进行“样式化”。私人无效CreateElement(int i){...
我已经阅读了很多与此有关的问题,但是所有这些问题都与VM模型有关,并且我没有VM模型,我正在尝试使用ResourceDictionary更改应用程序的语言...]]
[我试图通过将样式资源合并到应用程序资源中,同时将控件添加到UI中,从而将新样式应用于自定义控件,但是新样式未应用于......]
[Wpf Validation.ErrorTemplate的动态资源查找
在我的App.xaml中,我为Validation.ErrorTemplate定义了一个资源,该资源取决于动态BorderBrush资源。我打算在每个窗口以及不同的窗口中定义唯一的BorderBrush。
我有几种通用样式,我想在Windows 8.1应用程序的多个页面中共享它们。我知道可以使用合并字典选项来实现,但是我不知道如何使用样式...
我已经用WPF编写了非常基本的UI已有一年多了。我现在正在开发第一个大型应用程序,因此将更深入地研究XAML中的代码重用。我在确定...