0

にアクセスしようとしてControlいますTemplate。このために、私は control を再定義しましたCalendarDayButton:

<Window.Resources>
    <Style x:Key="myStyleDayButtonCalendar" TargetType="{x:Type CalendarDayButton}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type CalendarDayButton}">
                    <Grid  Name="gridCalendar">
                        <ContentControl Margin="5,1,5,1" Content="{TemplateBinding Content}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid x:Name="LayoutRoot" Background="White">
    <Calendar CalendarDayButtonStyle="{StaticResource myStyleDayButtonCalendar}" Name="myCalendar"  SelectedDatesChanged="Calendar_SelectedDatesChanged_1" />
</Grid>

それは大丈夫です。しかし、自分のコントロールGRIDにアクセスしたいとき。不可能:

private void Calendar_SelectedDatesChanged_1(object sender, SelectionChangedEventArgs e)
{
    Grid gridInTemplate = (Grid)myCalendar.Template.FindName("gridCalendar", myCalendar) as Grid;
}

私のグリッドはnullです。というわけで、別のものでやってみましたControl。とButton:

<Window.Resources>
   <Style x:Key="myStyleButton" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid  Name="myButton">
                        <Ellipse Fill="DarkBlue"></Ellipse>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>

<Grid x:Name="LayoutRoot" Background="White">
    <Calendar CalendarDayButtonStyle="{StaticResource myStyleDayButtonCalendar}" Name="myCalendar"  SelectedDatesChanged="Calendar_SelectedDatesChanged_1" />
    <Button Style="{StaticResource myStyleButton}" Name="myButton2" Margin="92,99,518,338" Click="myButton2_Click_1"></Button>
</Grid>

コードビハインド:

private void myButton2_Click_1(object sender, RoutedEventArgs e)
{
    Grid gridInTemplate = (Grid)myButton2.Template.FindName("myButton", myButton2);
}

ここで gridInTemplate はNOT NULLです。dayCalendarButton gridInTemplate の場合はなぜNULLですか? の使用は避けたいと思いますVisualTreeHelper

4

1 に答える 1