我發現問題是什麼,它與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. 從代碼C#編輯樣式WPF#
- 3. 如何通過代碼在WPF獲取樣式的特定元素C#
- 4. 無法通過代碼
- 5. 無法通過java代碼
- 6. 如何通過C#代碼使用此樣式創建xml?
- 7. 通過代碼設置WPF中的GridView顏色通過代碼
- 8. 需要關於通過Javascript代碼應用樣式的幫助
- 9. 無法通過樣式設置DependencyProperty值
- 10. 通過C#代碼
- 11. 通過C#代碼
- 12. WPF - 在代碼後面更改代碼樣式
- 13. 如何通過c#中的代碼更改wpf中的資源?
- 14. 在WPF中爲FolderBrowserDialog應用xaml樣式
- 15. 如何通過XAML應用樣式超鏈接TextDecorations屬性WPF
- 16. 無法使用C#代碼
- 17. CSS定位:無法通過代碼
- 18. 無法通過代碼訪問控制
- 19. 無法通過代碼點火器
- 20. 無法通過HttpWebRequest獲取HTML代碼
- 21. 無法通過在C
- 22. 代碼中的C#樣式ComboBoxItem
- 23. WPF應用程序託管/通過IronRuby執行Ruby代碼
- 24. 生成包含來自C#觸發器的WPF樣式代碼
- 25. 如何在使用OpenXML通過c#代碼編輯word文檔文件時將樣式應用於段落?
- 26. 在WPF中顯示HTML編碼樣式
- 27. 無法運行並通過Java爲C代碼提供輸入
- 28. 無法通過命令行來構建C#代碼
- 29. 通過代碼更改樣式主題中的文本顏色
- 30. 從通過C#代碼
樣式應該在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