2009-10-05 97 views
7

我有一個用戶控件,將樣式應用於按鈕,樣式包含ControlTemplate部分。在ControlTemplate中,有各種UI元素,例如Ellipse和Path。WPF從代碼後面設置命名樣式元素?

如果我給這些元素 - 橢圓和路徑 - 帶有x:Name的名稱,我可以從後面的代碼訪問它們嗎?

它似乎風格的橢圓和路徑不可見,因爲我得到一個編譯錯誤(C#)。

我該怎麼做呢?

回答

18

由於模板可以實例化多次,因此無法通過x:Name綁定生成的成員。相反,您必須在應用於控件的模板中找到指定的元素。

鑑於簡化XAML:

<ControlTemplate x:Key="MyTemplate"> 
    <Ellipse x:Name="MyEllipse" /> 
</ControlTemplate> 

你會做這樣的事情:

var template = (ControlTemplate)FindResource("MyTemplate"); 

template.FindName("MyEllipse", myControl); 

甚至更​​簡單:

var ellipse = (Ellipse)myControl.Template.FindName("MyEllipse", myControl); 

你可以閱讀有關FrameworkTemplate.FindName

一些示例和討論here,herehere

+0

完美,非常感謝! – MattJ 2009-10-05 19:44:18

+11

如果它是完美的,那麼將其標記爲答案。 – Vaccano 2009-12-28 20:37:35