【问题标题】:WPF nested template binding in itemscontrol项目控件中的 WPF 嵌套模板绑定
【发布时间】:2019-01-14 09:30:58
【问题描述】:

我遇到了嵌套模板绑定问题。

拥有一个带有模板的 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 标签之间放置什么样的绑定或语法?我尝试了几个选项,但似乎都没有工作。目前无法猜测。

谢谢

完整代码sn-p

<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>

【问题讨论】:

  • 我希望是 Text="{Binding NameOfPropertyBoundAsItem}"
  • Text="{Binding DetailPaneText}" 这样它不起作用,我猜是因为它在 ToggleButton 中而不是在集合的当前项中搜索绑定。
  • @Jesse: {Binding Path=DetailPaneText} 应该可以工作。或{TemplateBinding Tag}。你的BreadcrumbOpenButton 风格是如何定义的?

标签: wpf binding itemscontrol


【解决方案1】:

您应该在 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>

【讨论】:

  • 已经试过了,但效果不佳,谢谢!
【解决方案2】:

如果您尝试将按钮的工具提示文本绑定到 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>

【讨论】:

    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多