如何为generic.xaml上的多个按钮引用click_event?

时间:2014-01-08 11:43:07

标签: c# wpf xaml generics calendar

我有一个generic.Xaml主题来创建一个自定义日历控件,它位于另一个项目中,引用到我的主WPF表单。在此通用页面上,日历上的每天/每个方块都已设置为按钮。我想为每个按钮添加一个click_event,然后在我将日历控件放到的表单上触发一个方法。

这是日历:

Each square is a button.

然后是XAML代码:

<Button IsEnabled="{Binding IsEnabled}" Click="" BorderThickness="0" ScrollViewer.VerticalScrollBarVisibility="Auto" Background="{x:Null}" Foreground="White" Height="72" Width="131">
                                                    <Button.Template>
                                                        <ControlTemplate>
                                                            <ContentPresenter
                                                                VerticalAlignment="Center"
                                                                HorizontalAlignment="Left">
                                                                <ContentPresenter.Content>
                                                                    <Grid x:Name="ContentGrid" HorizontalAlignment="Left" >
                                                                        <Grid.ColumnDefinitions>
                                                                            <ColumnDefinition Width="15*" />
                                                                            <ColumnDefinition Width="*" />
                                                                            <ColumnDefinition Width="15*" />
                                                                        </Grid.ColumnDefinitions>
                                                                        <StackPanel Orientation="Horizontal" DockPanel.Dock="Top" FlowDirection="RightToLeft">
                                                                        <TextBlock Text="{Binding Date, Converter={StaticResource DateConverter}, ConverterParameter=DAY}"  Grid.Column="0" VerticalAlignment="Top" FontSize="14" Margin="5,5,5,5" FontWeight="Light" >
                                                                            <TextBlock.Style>
                                                                                <Style TargetType="{x:Type TextBlock}">
                                                                                    <Style.Triggers>
                                                                                        <DataTrigger Binding="{Binding IsTargetMonth}" Value="false">
                                                                                            <Setter Property="TextBlock.Foreground" Value="Black"></Setter>
                                                                                        </DataTrigger>
                                                                                    </Style.Triggers>
                                                                                </Style>
                                                                            </TextBlock.Style>
                                                                        </TextBlock>
                                                                        </StackPanel>
                                                                        <TextBlock Text="{Binding Notes, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" VerticalAlignment="Center" FontSize="14"/>
                                                                    </Grid>
                                                                </ContentPresenter.Content>
                                                            </ContentPresenter>
                                                        </ControlTemplate>
                                                    </Button.Template>
                                                </Button>

从代码中可以看出,我将click_event留空,因为这是我需要帮助的,因为我不确定在另一个项目中引用该方法需要什么。我试过简单地将方法名称放入,这是我收到的错误:

http://i.stack.imgur.com/M2B0e.jpg

我想要链接的方法(将打开另一种形式):

  private void Day_Click(object sender, RoutedEventArgs e)
    {
        CalendarExtension CE = new CalendarExtension(DateTime.Now, _loggedInUser);
        CE.Show();
    }

我的问题,正如标题所述,是从Generic.xaml页面引用Click_Event的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

啊,旧的我如何处理在generic.xaml '问题中声明的控件的事件。好吧,坦率地说,这有点痛苦。您需要在应用CustomControl时调用的ControlTemplate中实施Control.ApplyTemplate Method

在此方法中,您将需要访问相关的UI元素(如果您命名它们会有帮助)并以编程方式添加事件处理程序。您可以查看MSDN上的How to: Find ControlTemplate-Generated Elements页面,以帮助您从ControlTemplate访问UI元素。我猜你可以自己附上处理程序。