将不同的点击处理程序分配给全局控制模板

时间:2012-10-25 14:59:11

标签: c# wpf xaml

我正在使用此SimpleExpander的略微修改版本,以便我的扩展程序标头可以点击。

http://www.codeproject.com/Articles/248112/Templating-WPF-Expander-Control

以下是相关的源代码:

<ControlTemplate x:Key="SimpleExpanderTemp" TargetType="{x:Type Expander}">

            <DockPanel>

                <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
                    <ToggleButton x:Name="ExpanderButton" />

                    <!-- button with hard coded click handler -->
                    <Button Name="SharerHeader" Click="SharerHeader_Click_1"> 
                        <ContentPresenter Content="{TemplateBinding Header}" />
                    </Button>
                </StackPanel>

            </DockPanel>
        </ControlTemplate>

效果很好。现在我想在我的应用程序中重用这个控件模板,所以我把代码移到app.xaml中。但是,我的标题被硬编码为click事件,我希望能够根据扩展器正在使用的页面设置单击处理程序。如何实现此目的?

1 个答案:

答案 0 :(得分:1)

  1. 向项目中添加一个新的ResourceDictionary(将其命名为RD1.xaml),将模板移入其中。

  2. 使用此签名

    添加一个新类(将其命名为RD1.xaml.cs)
    public partial class SomeClassName : ResourceDictionary
    
  3. 将此行代码添加到ResourceDictionary标记(在RD1.xaml中)

    x:Class="WpfApplication1.SomeClassName"
    
  4. 将这些代码行添加到App.xaml(如果RD1在文件夹中,则添加FolderName)

    <Application.Resources>
            <ResourceDictionary>
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="FolderName\RD1.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
    </Application.Resources>
    
  5. 现在您可以在RD1.xaml.cs中实现事件处理程序