c# WPF绑定不能处理数据上下文

本文关键字:数据 上下文 处理 不能 WPF 绑定 | 更新日期: 2023-09-27 18:15:36

我希望为列表框中的条目显示一个工具提示。工具箱将包含一个文本框和列表框中条目中图像的副本(更大)我既可以得到文本框中的文本也可以得到要显示的图像。显示图像但不显示文本的代码是

<ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Border  x:Name="Bd" SnapsToDevicePixels="true"  Background="#EEFFFFFF" BorderBrush="#FFCCCCCC"   
                            HorizontalAlignment="Center" VerticalAlignment="Center"
                            BorderThickness="1">
                        <Grid>
                            <StackPanel Margin="0,0,0,0" VerticalAlignment="Top" HorizontalAlignment="Left">                                    
                                <Image x:Name="img" ToolTipService.Placement="Top"
                                       Source="{Binding Path=ImageUri}" Height="64" Stretch="Uniform" Width="64">
                                    <Image.RenderTransform>
                                        <TransformGroup>
                                            <ScaleTransform ScaleX="1" ScaleY="1" x:Name="scaleTrans"/>
                                        </TransformGroup>
                                    </Image.RenderTransform>
                                    <Image.ToolTip>
                                        <ToolTip BorderBrush="{x:Null}" Background="{x:Null}" Effect="{x:Null}"
                                                 DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" 
                                                 HasDropShadow="False">
                                            <Border Background="{x:Null}" VerticalAlignment="Center" Margin="0" Width="600" 
                                                    HorizontalAlignment="Center">
                                                <Grid Background="{x:Null}">
                                                    <StackPanel >
                                                    <TextBlock Margin="5" Padding="5" FontSize="14" FontWeight="Bold"
                                                               Text="{Binding Path=FTitle}"
                                                               Background="{DynamicResource {x:Static SystemColors.InactiveBorderBrushKey}}"/> 
                                                    <Border Margin="8,0,8,12.5"  VerticalAlignment="top">
                                                            <Image Source="{Binding Path=Source}"/>
                                                    </Border>
                                                    </StackPanel>
                                                </Grid>
                                            </Border> 
                                        </ToolTip>
                                    </Image.ToolTip>
                                </Image>
                            </StackPanel>
                        </Grid>
                    </Border>
                </ControlTemplate>

此代码是ListBox使用的代码的一部分下面的代码(如上面的列表所示)在工具提示中显示图像,但不显示文本框

<ToolTip BorderBrush="{x:Null}" Background="{x:Null}" Effect="{x:Null}"
     DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" 
     HasDropShadow="False">
             <Border Background="{x:Null}" VerticalAlignment="Center"Margin="0" Width="600" 
                                                    HorizontalAlignment="Center">
                <Grid Background="{x:Null}">
                   <StackPanel >
                      <TextBlock Margin="5" Padding="5" FontSize="14" FontWeight="Bold"
                                                               Text="{Binding Path=FTitle}"
                                                               Background="{DynamicResource {x:Static SystemColors.InactiveBorderBrushKey}}"/> 
                     <Border Margin="8,0,8,12.5"  VerticalAlignment="top">
                          <Image Source="{Binding Path=Source}"/>
                     </Border>
                  </StackPanel>
                </Grid>
              </Border> 
           </ToolTip>

如果删除

DataContext="{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}" from <ToolTip

文本按预期工作,但图像现在失败(如预期)

我试过了a)修改原来的TextBlock绑定点,使其指向FTitle条目的可观察集合,从而驱动列表框条目

<TextBlock Margin="5" Padding="5" FontSize="14" FontWeight="Bold"
        Text="{Binding Path=DataContext.FTitle, RelativeSource={RelativeSource FindAncestor,                                               AncestorType={x:Type UserControl}}}"
        Background="{DynamicResource {x:Static SystemColors.InactiveBorderBrushKey}}"/> 

b)将数据上下文移动到Image

<Border Margin="8,0,8,12.5"  VerticalAlignment="top">
       <Image Source="{Binding Path=DataContext.Source, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Image}}}"/>
                                                    </Border>enter code here

既不工作。(我确实试了很多变化,但都不起作用。

c# WPF绑定不能处理数据上下文

{Binding Path=PlacementTarget, RelativeSource={x:Static RelativeSource.Self}}将绑定UIElement(一个ListBoxItem)作为工具提示的DataContext。似乎您需要ListBoxItem的DataContext来绑定到底层模型的属性。在这种情况下,尝试将DataContext绑定更改为:{Binding Path=PlacementTarget.DataContext, RelativeSource={x:Static RelativeSource.Self}}