簡體   English   中英

如何將Click_Events添加到按鈕中,從而在Generic.Xaml中添加了運行時?

[英]How to Add Click_Events to buttons added a runtime in Generic.Xaml?

由於該問題時,我期待加入Click_Events在一個按鈕Generic.Xaml

但是,這並不是每個人都在問的典型問題,因為它並不那么簡單。 我的按鈕是在運行時生成的,所有35個按鈕都在日歷控件上。 日歷上的每一天(平方)都將是一個按鈕,單擊該按鈕將打開一個彈出窗口,其中顯示了完整的日期和更多詳細信息。

這是日歷控件的示例:

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

這是XAML代碼:

 <Button IsEnabled="{Binding IsEnabled}" Click="" BorderThickness="0" ScrollViewer.VerticalScrollBarVisibility="Auto" Background="{x:Null}" Foreground="White" Height="72" Width="131">
              <Button.Template>
                <ControlTemplate TargetType="{x:Type Button}">
                  <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>

從XAML中可以看到,有一個Click_Event可用,但是我不能引用另一種形式,也不能命名按鈕,因為會有多個按鈕,因此沒有直接的方法可以在類中引用方法。 此外,我嘗試進行綁定,但一直給我一個空綁定錯誤。

目前,在Calendar類中,我有以下方法:

public void BuildCalendar(DateTime targetDate)
    {
        Days.Clear();

        //Calculate when the first day of the month is and work out an 
        //offset so we can fill in any boxes before that.
        DateTime d = new DateTime(targetDate.Year, targetDate.Month, 1);
        int offset = DayOfWeekNumber(d.DayOfWeek);
       if (offset != 1) d = d.AddDays(-offset);

        //Show 5 weeks each with 7 days = 35
       for (int box = 1; box <= 35; box++)
       {
           Day day = new Day { Date = d, Enabled = true, IsTargetMonth = targetDate.Month == d.Month };
           day.PropertyChanged += Day_Changed;
           day.IsToday = d == DateTime.Today;
           Days.Add(day);
           d = d.AddDays(1);
       }
    }

還有我似乎無法引用的Day_Clicked方法(如果那是我需要做的):

 private void Day_Clicked(object sender, EventArgs e)
    {
        if (Clicked == null) return;

        Clicked(this, new DayClickedEventArgs(sender as Day));
    }

自定義EventHandler

 public event EventHandler<DayClickedEventArgs> Clicked;

活動類別:

public class DayClickedEventArgs : EventArgs
{
    public Day Day { get; private set; }

    public DayClickedEventArgs(Day day)
    {
        this.Day = day;
    }
}

Click_Events ,我需要知道如何為Click_Events中的每個已生成按鈕生成Click_Events Click_Events使用生成按鈕Generic.Xaml頁。

您必須等待,直到已經創建ControlTemplate的UI元素。 您可以為此處理FrameworkElement.ApplyTemplate方法 ,因為到此階段,已經應用了模板...。 然后,您需要使用FindName方法從XAML查找控件。

您可以查看MSDN上的“ 如何:查找ControlTemplate生成的元素”頁面,以幫助您從ControlTemplate訪問UI元素。 一旦您可以訪問UI元素,我猜您將能夠自行附加處理程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM