首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ControlTemplate的ControlTemplate之外获得对控件的引用?

如何在ControlTemplate的ControlTemplate之外获得对控件的引用?
EN

Stack Overflow用户
提问于 2018-02-13 14:35:35
回答 1查看 21关注 0票数 0

在控件的ControlTemplate中,我定义了另一个控件的ControlTemplate,我希望从外部ControlTemplate获得对ListBox lstBx的引用,既不是:Storyboard.TargetName="lstBx" work,也不是这个:

代码语言:javascript
复制
Storyboard.Target="{Binding ElementName=lstBx, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}"

下面是我的代码的简化版本

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2018-02-13 14:52:34

虽然无法执行这样的绑定,但您可以使用一些代理。例如,可以绑定到ToggleButtonTag属性:

代码语言:javascript
复制
<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>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48769229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档