2015-02-23 58 views
0

我已經遵循了CodeProject上的DiagramDesigner示例,以瞭解如何在WPF中使用裝飾器,因爲它相對比較符合我的一些需求。訪問XAML定義樣式中的元素

我已經適應了一些實現,並且還添加了我自己的裝飾器,通過滑塊(裝飾器上的滑塊)控制控件的不透明度。

按照與作者相同的方法,我將滑塊和其他功能放置在xaml樣式定義文件中,如下所示。我現在正在掙扎A)想出如何在任何級別訪問滑塊,B)如何最好地開始將它與底層Viewmodel掛鉤,這將用於各種設置(在裝飾者上)。

<Style x:Key="OpacityAdorner" TargetType="{x:Type adorners:OpacityChrome}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type adorners:OpacityChrome}"> 
       <Grid> 
        <Slider x:Name="OpacitySlider" Style="{StaticResource OpacityControl}" ToolTip="Alter the opacity of the image to overlay with other images" Visibility="Collapsed"/> 
        <Ellipse x:Name="OpacitySliderEnable" Style="{StaticResource OpacityIcon}" ToolTip="Alter the visual opacity of the image" Visibility="Visible"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

CodeProject上的例子是在這裏http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part

回答

1

A)使用類似下面的代碼片段,從應用的模板獲得滑塊。

var slider = opacityAdorner.Template.FindName("OpacitySlider", opacityAdorner) as Slider; 

存在該模板尚未得到應用的情況下,在這種情況下,你需要preceed具有下列以前調用:

opacityAdorner.ApplyTemplate(); 

B)爲與掛鉤的最佳方法視圖模型(在我看來)是在OpacityChrome裝飾者上公開所需屬性爲依賴屬性。然後,您使用普通的Binding將新屬性連接到視圖模型,然後使用TemplateBinding將它們連接到模板元素。

+0

感謝您的支持。它有幫助。儘管如此,我仍然有點痛苦。我想在構建裝飾器時獲取滑塊,以便掛鉤事件以附加到依賴項屬性。但是,在此階段,ApplyTemplate()仍不適用模板,並且模板仍然爲空。我必須破解一些可行的事情。有沒有一種方法可以在裝飾器中覆蓋,所以我會知道該模板已經應用了? (OnApplyTemplate也沒有作品) – Zief 2015-02-24 10:49:14

+0

OnInitialized()實際上工作。不太喜歡這種必須在OnInitialized中手動連接Adorner中的控件/事件的方法,但似乎沒有太多辦法可以看到 – Zief 2015-02-24 11:25:10

+0

而我仍然需要在嘗試之前ApplyTemplate() Template.FindName,或者在OnInitialized達到代碼時,Template是否爲null – Zief 2015-02-24 13:44:51