我发现问题是什么,它与C#代码本身无关,但它在XAML中,而不是问题是我默认的颜色在XAML中设置重写我的风格的颜色。因此总而言之,当您通过XAML设置任何属性时,它总是会覆盖稍后在运行时由C#代码设置的样式,这对我来说似乎很奇怪,但至少这是它对我的工作原理。无法在WPF中通过C#代码应用样式
回答
默认的背景颜色避免的C#的风格运用在面板(AT-至少避免在默认设置会被应用在新Background
)。
你还没有发布你的风格的创作,也许有什么缺失吗?
有another similar answer在计算器上是创造和代码设置风格的一个很好的和简单的例子:
问:有谁知道怎么后面在代码中创建一个WPF的风格,我无法在网络或MSDN文档上找到任何内容。我曾经试过,但它不工作:
答:您需要制定者添加到样式,而不是使用RegisterName。以下代码在Window_Loaded事件中将创建一个新的TextBlock样式,该样式将成为窗口内TextBlock所有实例的默认样式。如果您希望将其明确地设置为一个特定的TextBlock,则可以设置该控件的Style属性,而不是将该样式添加到Resources字典中。
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Style style = new Style(typeof (TextBlock));
style.Setters.Add(new Setter(TextBlock.ForegroundProperty, Brushes.Green));
style.Setters.Add(new Setter(TextBlock.TextProperty, "Green"));
Resources.Add(typeof (TextBlock), style);
}
我用你的代码和修改的一点点进行验证。似乎工作正常。看一看:
在XAML代码Style Style_Panel = new Style(typeof(Panel));
public void Init_Style()
{
// Create Styles :
#region "Create Styles"
Style_Panel.Setters.Add(new Setter()
{
Property = Panel.BackgroundProperty,
Value = new SolidColorBrush(Colors.Red)
});
Resources.Add(Style_Panel.TargetType, Style_Panel);
#endregion
// Apply Styles :
#region "Apply Styles"
List<Visual> List_Visual = new List<Visual>();
List_Visual.Add(new StackPanel() { Name = "btn" });
//Enum_Visual(Panel_Main, List_Visual);
foreach (Visual visual in List_Visual)
{
if (visual is Panel)
{
Panel panel = visual as Panel;
//if (Tagged(panel, "titlebar"))
//{
//}
//else if (Tagged(panel) == false)
{
// panel.Background = new SolidColorBrush(Colors.Red); // <- WORKS .
panel.Style = Style_Panel; // <- DOES NOT WORKS !
}
}
}
#endregion
}
嘿,感谢您的尝试,但我发现,这个问题是不是连我的C#代码。它是在XAML代码后,我没有删除的每个面板的默认颜色,适用于他们的新的风格也是正确的红色看到,但突然的每个面板的活动将无法正常工作像鼠标按下,也许是因为他们没有背景所以你不能真的按他们..我不知道我会检查出来。我仍然不明白为什么XAML中的默认颜色避免应用于它们的样式。 – Lispwave 2013-02-22 07:35:41
这是依赖项属性的工作方式。来自Style的值将被您直接设置的值覆盖。阅读http://msdn.microsoft.com/en-us/library/ms743230.aspx – Manish 2013-02-22 08:42:13
- 1. WPF读样式在C#代码控制
- 2. WPF C#无法通过源代码绑定获取图像
- 3. 从代码C#编辑样式WPF#
- 4. 如何通过代码在WPF获取样式的特定元素C#
- 5. 无法通过代码
- 6. 无法通过代码
- 7. 无法通过java代码
- 8. 如何通过C#代码使用此样式创建xml?
- 9. 通过代码设置WPF中的GridView颜色通过代码
- 10. 需要关于通过Javascript代码应用样式的帮助
- 11. WPF工具包图表轴无法通过样式设置
- 12. 无法通过样式表设置html代码中元素大小的大小
- 13. C#WPF - 样式触发器不工作在代码背后
- 14. 通过C#代码
- 15. 通过C#代码
- 16. 无法通过样式设置DependencyProperty值
- 17. 无法通过c#代码调用jConfirm脚本
- 18. WPF - 在代码后面更改代码样式
- 19. 如何通过c#中的代码更改wpf中的资源?
- 20. 在WPF中为FolderBrowserDialog应用xaml样式
- 21. C#代码通过代理
- 22. 如何通过XAML应用样式超链接TextDecorations属性WPF
- 23. OS X的应用程序WebView无法通过代码加载
- 24. WPF触发无效上式中代码
- 25. 无法使用C#代码
- 26. 如何通过WPF中的c#代码隐藏来编写逐字XAML代码?
- 27. 无法通过代码点火器
- 28. 为什么我无法通过代码
- 29. ValidatorEnable无法通过JQuery代码工作?
- 30. 无法通过代码获取图像
样式应该在XAML中创建。并且也应用于XAML。为什么要用无用的东西填充代码后面。尝试在MVVM模式中查看WPF。 http://csharperimage.jeremylikness.com/2010/04/model-view-viewmodel-mvvm-explained.html 您会注意到,在Window(或其他UserControl)中使用样式并不是一种好的做法,构造函数。 – meorfi 2013-02-22 07:24:31
此外,这里是一个很好的教程,它将教你如何以正确的方式创建和使用样式。 http://www.wpftutorial.net/ :)顺便说一下,将来你永远不会用C#创建样式。你将使用XAML模板(STYLES或其他资源) – meorfi 2013-02-22 07:27:40
为什么使用C#而不是XAML进行样式设计?有一个原因,但我不能在这里描述为什么,在500个字符的有限评论。一般来说,我不喜欢XAML机制,但也有许多技术原因。 – Lispwave 2013-02-22 07:51:07