Связывание вложенных шаблонов WPF в itemscontrol - PullRequest
0 голосов
/ 14 января 2019

У меня проблема с вложенными шаблонами.

Наличие 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 голосов
/ 14 января 2019

Если вы пытаетесь привязать текст всплывающей подсказки кнопки к свойству Text текстового блока, вы можете привязать его, используя ElementName .

Назовите свою кнопку с помощью x: Имя

<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>
0 голосов
/ 14 января 2019

Вы должны ссылаться на TemplatedParent в Binding :

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