Silverlight ItemsControl によって表示される文字列のリストがあります。DataTemplate は、子として TextBlock を持つ Border コントロールです。アイテムに対応するボーダー コントロールにアクセスするにはどうすればよいですか? たとえば、背景色を変更するためにこれを行うことができます。
3430 次
3 に答える
2
これを行う簡単な方法は、テキストブロックの Parent を取得して Border としてキャストすることです。これの簡単な例を次に示します。
Xaml
<Grid>
<ItemsControl x:Name="items">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border>
<TextBlock MouseEnter="TextBlock_MouseEnter" MouseLeave="TextBlock_MouseLeave" Text="{Binding}" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
コードビハインド
public Page()
{
InitializeComponent();
items.ItemsSource = new string[] { "This", "Is", "A", "Test" };
}
private void TextBlock_MouseEnter(object sender, MouseEventArgs e)
{
var tx = sender as TextBlock;
var bd = tx.Parent as Border;
bd.Background = new SolidColorBrush(Colors.Yellow);
}
private void TextBlock_MouseLeave(object sender, MouseEventArgs e)
{
var tx = sender as TextBlock;
var bd = tx.Parent as Border;
bd.Background = new SolidColorBrush(Colors.White);
}
この例では、テキスト ボックスの親を取得して、境界線の背景を設定します。
于 2008-11-12T19:20:25.807 に答える
0
これを参照してください: http://msdn.microsoft.com/en-us/library/bb613579.aspxおよびこれ: http://blogs.msdn.com/wpfsdk/archive/2007/04/16/how-do-i -programmatically-interact-with-template-generated-elements-part-ii.aspx . 残念ながら、SL DataTemplate クラスには FindName メソッドがないため、SL では機能しません。
于 2010-05-13T19:17:38.137 に答える
0
ItemsControl.GetContainerForItemOverride メソッドをオーバーライドして、オブジェクトとコンテナーのペアを辞書に保存できます。
于 2008-11-12T13:49:16.223 に答える