繁体   English   中英

如何在 ControlTemplate 之外的 ControlTemplate 中获取对控件的引用?

[英]How to get a reference to a control within a ControlTemplate outside its ControlTemplate?

ControlTemplate ,我定义的控件ControlTemplate另一个控制的,我想获得到ListBox参考lstBx从外部ControlTemplate ,既: Storyboard.TargetName="lstBx"的工作,也不是这样的:

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>

虽然没有办法执行这种绑定,但您可以使用一些代理代替。 例如,您可以绑定到ToggleButtonTag属性:

<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 Name="toggleButton" Padding="30, 10">
                <ToggleButton.Template>
                    <ControlTemplate TargetType="ToggleButton">
                        <ControlTemplate.Triggers>
                            <EventTrigger RoutedEvent="ToggleButton.Checked">
                                <BeginStoryboard>
                                    <Storyboard>
                                        <DoubleAnimation Storyboard.TargetProperty="Tag" 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="{Binding ElementName="toggleButton" Grid.Row="1" ItemsSource="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ItemsSource}" />
</Grid>
</ControlTemplate>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM