只是想知道......对于共享定义(例如颜色,画笔),将它放在resourcedictionary(在XAML中)还是在代码隐藏(C#)中更好?假设:这些定义的使用都在XAML和代码隐藏中。
例如颜色定义,似乎我从互联网上阅读的每个教程都会将它放在resourcedictionary - <SolidColorBrush x:Key="Color1" Color="#cccccc"/>
中。
但是,如果将代码置于public static SolidColorBrush Color1 = new SolidColorBrush(#cccccc);
并通过x:静态扩展 - {x:Static local:MyColor.Color1}
在XAML中访问它,那么它会不会更好?
通过这种方式,我可以在XAML和代码隐藏中获得良好的智能感知。此外,请避免在后面的代码中对密钥进行硬编码 - SolidColorBrush Color1 = FindResource("Color1") as Style
。
修改 我的目标是:
因此,当设计人员访问XAML代码中的Background="{StaticResource Color1}"
时,它与代码隐藏中的TextBlock.Background = Color1;
相同。当有人要更改x:Key="Color1"
时,至少会出现编译错误。
答案 0 :(得分:0)
我个人可能会把它放在资源方面,因为这样你就可以使用blend来直观地看到更改设计器时发生的事情。如果您的应用程序需要很长时间才能加载,这非常有用。
检查这个以从后面的代码访问资源,所以你仍然只在一个地方。 Accessing a resource via codebehind in WPF
编辑:如果您使用的是资源字典,它将以混合/设计模式显示,而无需启动您的应用程序。如果您的应用程序需要一段时间才能加载,那么这会节省大量时间修改颜色,启动,检查,然后停止您的应用程序。我无法说出它对性能的影响,但总的来说,如果你可以在XAML中做一些事情而不是它背后的代码,最好在那里做。
答案 1 :(得分:0)
这实际上取决于您要完成的任务,如果您正在进行自定义控件并想要一个可访问的属性,比如说您想要一个自定义TextBox
控件,左侧是Label,而Label文字颜色是您要使用Color
属性控制的内容,您可以创建DependencyProperty
,也可以通过Style
中的ResourceDictionary
进行设置。
public class CustomTextBox : TextBox
{
// Dependency Property
public static readonly DependencyProperty LabelForegroundProperty =
DependencyProperty.Register(
"CurrentTime",
typeof(Color),
typeof(CustomTextBox),
new PropertyMetadata(Colors.Black));
// .NET Property wrapper
public Color LabelForeground
{
get { return (Color)GetValue(LabelForegroundProperty); }
set { SetValue(LabelForegroundProperty, value); }
}
...
}
风格:
<Style TargetType="CustomTextBox">
<Setter Property="LabelForeground" Value="Green" />
</Style>
即使你正在做其他事情,你仍然应该更喜欢在ResourceDictionary
中定义资源并尝试尽可能少地从后面的代码访问它们(因为它更容易切换出ResourceDictionary
})。但如果你能详细说明你想做什么,我可以给你一个更好的答案。