ItemsControl
概念的に無関係なソースからデータを取得する必要がある によって生成されたアイテムのツールチップを表示しようとしています。たとえば、次のような Item クラスがあるとします。
public class Item
{
public string ItemDescription { get; set; }
public string ItemName { get; set; }
}
次のように、ツールチップを使用して ItemsControl 内にアイテムを表示できます。
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ItemName}">
<TextBlock.ToolTip>
<ToolTip>
<TextBlock Text="{Binding ItemDescription}" />
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
DataContext
しかし、の経由でアクセスできる別のプロパティがあるとしますItemsControl
。ツールチップ内からこれを行う方法はありますか? 例えば、
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ItemName}">
<TextBlock.ToolTip>
<ToolTip>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="{Binding ItemDescription}" />
<TextBlock Grid.Row="1" Text="{Bind this to another property of the ItemsControl DataContext}" />
</Grid>
</ToolTip>
</TextBlock.ToolTip>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
私が使用したテスト ウィンドウのコードは次のとおりです。
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
List<Item> itemList = new List<Item>() {
new Item() { ItemName = "First Item", ItemDescription = "This is the first item." },
new Item() { ItemName = "Second Item", ItemDescription = "This is the second item." }
};
this.Items = itemList;
this.GlobalText = "Something else for the tooltip.";
this.DataContext = this;
}
public string GlobalText { get; private set; }
public List<Item> Items { get; private set; }
}
したがって、この例では、プロパティの値を表示したいと思いGlobalText
ます (実際には、これは別のカスタム オブジェクトになります)。
問題を複雑にするために、私は実際に DataTemplates を使用して、ItemsControl 内に 2 つの異なるタイプのオブジェクトを表示していますが、どんな支援も大歓迎です!