gpt4 book ai didi

wpf - 应用程序无法在 Generic.xaml 中找到资源

转载 作者:行者123 更新时间:2023-12-04 06:15:14 25 4
gpt4 key购买 nike

我正在开发一个 WPF 应用程序,该应用程序将 Telerik RAD 控件用于 WPF。该应用程序将在带有触摸屏的 PC 上使用,因此我需要将 DateTimePicker 控件上的选择器之类的东西放大,以便像我这样的人用香肠手指轻松按下它们。

我最初使用 Expression Blend 来编辑控件模板的副本。这在我设计的 UserControl 的 XAML 文件中创建了一个 ControlTemplate。我现在正在处理另一个 UserControl,它也将使用 DateTimePicker,所以我想重用 ControlTemplate。

我所做的是将修改后的模板移动到项目(WPF 控件库)Generic.XAML 中的新命名样式中。这是 Generic.xaml 的一小段:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CarSystem.CustomControls"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:Telerik_Windows_Controls_Chromes="clr-namespace:Telerik.Windows.Controls.Chromes;assembly=Telerik.Windows.Controls">

<Style x:Key="RadDateTimePickerControlTemplate1" TargetType="{x:Type telerik:RadDateTimePicker}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type telerik:RadDateTimePicker}">
. . .
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

</ResourceDictionary>

这是我引用样式的 XAML 片段:
<UserControl x:Class="CarSystem.CustomControls.ReportCriteria"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:cs="clr-namespace:CarSystem.CustomControls"
mc:Ignorable="d"
Height="648"
Width="1117">

<Grid Background="{DynamicResource ContentBackground}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<GroupBox BorderBrush="Black" FontSize="20" FontWeight="Bold" Grid.Row="0" Header="Report Criteria: " Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="320" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="450" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="110" />
</Grid.ColumnDefinitions>

<GroupBox BorderBrush="Black" FontSize="20" FontWeight="Bold" Grid.Column="0" Header="Date Range:" Margin="5">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="2*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock FontSize="18"
FontWeight="Bold"
Grid.Column="0"
Grid.Row="0"
HorizontalAlignment="Right"
Text="Start Date: " />
<telerik:RadDateTimePicker FontSize="18"
FontWeight="Bold"
Grid.Column="1"
Grid.Row="0"
Name="StartDatePicker"
Style="{DynamicResource RadDateTimePickerControlTemplate1}" />
<TextBlock FontSize="18"
FontWeight="Bold"
Grid.Column="0"
Grid.Row="1"
HorizontalAlignment="Right"
Text="End Date: " />
<telerik:RadDateTimePicker FontSize="18"
FontWeight="Bold"
Grid.Column="1"
Grid.Row="1"
Name="EndDatePicker"
Style="{DynamicResource RadDateTimePickerControlTemplate1}" />
</Grid>
</GroupBox>
. . .

</GroupBox>
</Grid>
</UserControl>

当我在 Expression Blend 中工作时,一切看起来都很好。我看到控件下拉按钮的宽度发生了变化。回到 Visual Studio,一切都可以正常编译,但没有显示更改——我只看到控件的默认样式,对样式的引用下面有一条蓝色波浪线。将鼠标悬停在波浪线上时,将显示以下消息:
     The resource "RadDateTimePickerControlTemplate1" cannot be resolved.

如果我在 XAML 中将“DynamicResource”更改为“StaticResource”,也会发生同样的事情。此外,我没有对项目的 Assembly.Info 文件进行任何更改。

我该如何解决?

谢谢

托尼

最佳答案

据我所知,您不能在 generic.xaml 中引用要引用的命名资源 - 您必须将其放入 app.xaml

您必须在样式的键中输入类型或在控件模板的键中输入 ComponentResourceKey
并在类静态构造函数中覆盖元数据,例如:

  public class FlatStylebutton : Button
{
static FlatStylebutton()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(FlatStylebutton), new FrameworkPropertyMetadata(typeof(FlatStylebutton)));
}
}

因此,您的问题的解决方案可能是将样式移动到 app.xaml

或者,您可以将其放在单独的 ResourceDictionary xaml 文件中,然后将其导入 ResourceDictionary.MergedDictionaries

关于wpf - 应用程序无法在 Generic.xaml 中找到资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7334445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com