如何在ControlTemplate外部的ControlTemplate中引用控件?

时间:2018-02-13 14:35:35

标签: c# wpf

在我正在定义另一个控件的ControlTemplate的控件的ControlTemplate中,我希望从外部lstBx获取对ListBox ControlTemplate的引用, 既不是:Storyboard.TargetName="lstBx"也不是:{/ p>

Storyboard.Target="{Binding ElementName=lstBx, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"

这是我的代码的简化版本

<ControlTemplate TargetType="{x:Type ContentControl}" x:Name="cont">
    <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
        <Grid.RowDefinitions>
            <RowDefinition Height="auto" />
            <RowDefinition Height="auto" />
        </Grid.RowDefinitions>
        <Border Canvas.ZIndex="1" CornerRadius="4" BorderThickness="1" BorderBrush="Black" Background="{StaticResource btn3d}">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="32" />
                    <ColumnDefinition Width="1" />
                    <ColumnDefinition Width="2*" />
                </Grid.ColumnDefinitions>
                <ToggleButton Padding="30, 10">
                    <ToggleButton.Template>
                        <ControlTemplate TargetType="ToggleButton">
                            <ControlTemplate.Triggers>
                                <EventTrigger RoutedEvent="ToggleButton.Checked">
                                    <BeginStoryboard>
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="lstBx" Storyboard.TargetProperty="Height" From="0" To="60" Duration="0:0:0.5" />
                                        </Storyboard>
                                    </BeginStoryboard>
                                </EventTrigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </ToggleButton.Template>
                </ToggleButton>
                <StackPanel Grid.Column="2" />
            </Grid>
        </Border>
        <ListBox Name="lstBx" Height="0" Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}" />
    </Grid>
</ControlTemplate>

1 个答案:

答案 0 :(得分:-1)

虽然无法执行此类绑定,但您可以使用某些代理。 例如,您可以绑定到ToggleButton的{​​{1}}属性:

Tag