WPF在控件中嵌套模板绑定

时间:2019-01-14 09:30:58

标签: wpf binding itemscontrol

我对嵌套模板绑定有疑问。

具有一个带有模板的ItemsControl,效果很好。该模板还包含一个工具提示(显示非常完美)。

<Button.ToolTip>
     <TextBlock Text="{Binding Path=DetailPaneText}" />
</Button.ToolTip>

但是在itemscontrol模板中,我有一个 ToggleButton ,其中有另一个模板。而且由于绑定不正确,我似乎也无法显示该文本。

切换按钮中的代码

<StackPanel Background="#293344" Width="200" x:Name="DetailTab" Margin="0">
     <TextBlock FontSize="12" Text="" Foreground="White" />
</StackPanel>

我应该在Text标签之间插入哪种绑定或语法?我尝试了几种选择,但似乎都没有。目前无法猜测。

谢谢

完整的代码段

<ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" Margin="0" >
                    <Button Command="{x:Static CobraInfrastructure:Commands.NavigateFromBreadcrumb}" CommandParameter="{Binding Path=Current}" Tag="{Binding DetailPaneText}" x:Name="TextBlock_Detail" Style="{DynamicResource BreadcrumbButton}">
                        <Button.Resources>
                            <Style BasedOn="{StaticResource {x:Type ToolTip}}" TargetType="ToolTip">
                                <Setter Property="Background" Value="#F8F8F8" />
                                <Setter Property="BorderBrush" Value="{x:Null}" />
                                <Setter Property="Padding" Value="15" />
                                <Setter Property="MinWidth" Value="300" />
                                <Setter Property="MinHeight" Value="150" />
                                <Setter Property="VerticalAlignment" Value="Top" />
                            </Style>
                        </Button.Resources>
                        <Button.ToolTip>
                            <TextBlock Text="{Binding Path=DetailPaneText}" />
                        </Button.ToolTip>
                        <Grid Margin="5">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="20"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="20"/>
                                <RowDefinition Height="auto"/>
                            </Grid.RowDefinitions>
                            <TextBlock x:Name="HyphenTextBlock" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Text="{Binding Path=EntityTitle}" FontSize="12" FontWeight="Bold" Foreground="White" Grid.Row="0" Grid.Column="0"/>
                            <TextBlock VerticalAlignment="Stretch" Text="{Binding Path=Text, NotifyOnTargetUpdated=True, Mode=OneWay}" FontSize="10" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2"/>
                        </Grid>
                    </Button>
                    <ToggleButton Focusable="False" Style="{DynamicResource BreadcrumbOpenButton}" VerticalAlignment="Stretch" HorizontalAlignment="Center" Tag="{Binding Path=DetailPaneText}">
                        <ToggleButton.Template>
                            <ControlTemplate TargetType="{x:Type ToggleButton}">
                                <StackPanel Orientation="Horizontal">
                                    <Border Width="13" Background="#293344">
                                        <fa:FontAwesome Icon="CaretRight" Foreground="White" FontSize="18"  VerticalAlignment="Center" HorizontalAlignment="Center" />
                                    </Border>
                                    <StackPanel Background="#293344" Width="200" x:Name="DetailTab" Margin="0">
                                        <TextBlock FontSize="12" Text="" Foreground="White" />
                                    </StackPanel>
                                </StackPanel>
                                <ControlTemplate.Triggers>
                                    <Trigger Property="IsChecked" Value="True">
                                        <Setter Property="Width" TargetName="DetailTab" Value="200"/>
                                    </Trigger>
                                    <Trigger Property="IsChecked" Value="False">
                                        <Setter Property="Width" TargetName="DetailTab" Value="1"/>
                                    </Trigger>
                                </ControlTemplate.Triggers>
                            </ControlTemplate>
                        </ToggleButton.Template>
                    </ToggleButton>
                </StackPanel>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding IsVisible}" Value="False">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsOverview}" Value="True">
                        <Setter Property="Style" TargetName="TextBlock_Detail" Value="{DynamicResource LinkButton}" />
                        <Setter Property="FontWeight" TargetName="TextBlock_Detail" Value="Bold" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ItemsControl.ItemTemplate>

2 个答案:

答案 0 :(得分:0)

您应该在 Binding 中的 TemplatedParent 上进行引用:

<StackPanel Background="#293344" Width="200" x:Name="DetailTab" Margin="0">
    <TextBlock FontSize="12" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=DataContext.DetailPaneText}" Foreground="White" />
</StackPanel>

答案 1 :(得分:0)

如果您尝试将按钮的工具提示文本绑定到textblock的 Text 属性,则可以使用 ElementName 进行绑定。

使用 x:Name

为您的按钮命名
<Button x:Name="XButton">
<Button.ToolTip>
     <TextBlock Text="{Binding Path=DetailPaneText}" />
</Button.ToolTip>
</Button>

使用 ElementName 将其绑定为文本块文本。

<StackPanel Background="#293344" Width="200" x:Name="DetailTab" Margin="0">
     <TextBlock FontSize="12" Text="{Binding ElementName=XButton, Path=ToolTip.Text}" />
</StackPanel>