我在UserControl中有一个Expander,我已将工具提示设置如下
<Expander.Header >
<Border Background="#cccccc" Margin="2 8 8 8" Height="52" >
<Border.ToolTip>
<ToolTip >
<ToolTip.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#cccccc"/>
</Style>
</ToolTip.Resources>
<Border Background="#4d4d4d" BorderThickness="0.5" CornerRadius="5" MinWidth="200">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<!--#region Details -->
<WrapPanel Grid.Column="1" Margin="8">
...
<TextBlock Margin="4" Text="{Binding Description}"/>
...
</WrapPanel>
<!--#endregion-->
<!--#region Previews images-->
<Border Grid.Column="0" BorderBrush="Red" BorderThickness="0 0 0.5 0" MinHeight="200">
<ItemsControl ItemTemplate="{StaticResource PanelCardToolTip}" ItemsSource="{Binding DataContext.ListVoci,RelativeSource={RelativeSource AncestorType=Window}}" MinWidth="120" >
<!--<ItemsControl ItemTemplate="{StaticResource PanelCardToolTip}" ItemsSource="{Binding}" MinWidth="120" >-->
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border>
<!--#endregion-->
</Grid>
</Border>
</ToolTip>
</Border.ToolTip>
</Border>
</Expander.Header>
datatemplate如下:
<DataTemplate x:Key="PanelCardToolTip">
<Border Background="#4d4d4d" BorderBrush="#cccccc" BorderThickness="0.5" Width="55">
<StackPanel Margin="8" Orientation="Vertical">
<TextBlock Text="Static Text" Foreground="White"></TextBlock>
<Image Margin="2" Source="{Binding PathImgAnteprima}" Width="30"/>
<TextBlock FontWeight="Medium" Margin="2 4 2 2" Text="{Binding Etichetta}"/>
<TextBlock FontWeight="Light" Margin="2 0 2 2" Text="{Binding Descrizione}"/>
</StackPanel>
</Border>
<!-- CardView -->
</DataTemplate>
问题是ItemControl的ItemsSource不起作用(就好像ItemsSource对DataContext不可见,但它是可见的)。 具有相同ItemsSource和DataTemplate的相同ItemsControl在Tooltip和Expander内部的面板中工作正常。
非常感谢 熔点
答案 0 :(得分:0)
您可以将Border元素的Tag属性绑定到窗口的DataContext,然后绑定到ToolTip的PlacementTarget的Tag属性:
<Expander.Header>
<Border Background="#cccccc" Margin="2 8 8 8" Height="52"
Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=Window}}">
<Border.ToolTip>
<ToolTip>
<ToolTip.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="#cccccc"/>
</Style>
</ToolTip.Resources>
<Border Background="#4d4d4d" BorderThickness="0.5" CornerRadius="5" MinWidth="200">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="180"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" BorderBrush="Red" BorderThickness="0 0 0.5 0" MinHeight="200">
<ItemsControl ItemTemplate="{StaticResource PanelCardToolTip}"
ItemsSource="{Binding PlacementTarget.Tag.ListVoci,RelativeSource={RelativeSource AncestorType=ToolTip}}" MinWidth="120">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Border>
</Grid>
</Border>
</ToolTip>
</Border.ToolTip>
<TextBlock>....</TextBlock>
</Border>
</Expander.Header>
使用RelativeSource绑定无法在ToolTip中绑定父窗口属性的原因是ToolTip驻留在自己的可视树中。
答案 1 :(得分:0)
Text="{Binding **Description**}"
等其他元素可以正常访问并且工作正常。问题仅出在不重复列表的ItemsSource上。
使用工具提示中的<ToolTip DataContext="{Binding DataContext
,无法使用字段Text="{Binding **Description**}"
答案 2 :(得分:0)
ObservableCollection<Voci>
。 ObservableCollection ListComm<MyModel>
是ListView的商品来源就我而言,Expander是UserControl的一部分,包含在ListView中使用的DataTemplate中
代码写在下面
<ListView
ItemTemplate="{StaticResource PreviewCTemplate}"
ItemsSource="{Binding DataContext.ListComm, RelativeSource={RelativeSource AncestorType=Window}}"
SelectedItem="{Binding DataContext.SelectedComm, RelativeSource={RelativeSource AncestorType=Window}}"
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Center" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
答案 3 :(得分:0)
[已解决] - 真正的问题是`RelativeSource = {RelativeSource AncestorType = Window}。最终解决方案如下
<Border Grid.Column="1" BorderBrush="#cccccc" BorderThickness="0.2 0 0 0" MinHeight="200">
<ItemsControl ItemTemplate="{StaticResource PanelCardToolTip}" ItemsSource="{Binding ListVoci}" MinWidth="120" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
另一项操作是我从Expander.Header标签中写出 Itemscontrol 。
谢谢大家 熔点