1

Silverlight ItemsControl によって表示される文字列のリストがあります。DataTemplate は、子として TextBlock を持つ Border コントロールです。アイテムに対応するボーダー コントロールにアクセスするにはどうすればよいですか? たとえば、背景色を変更するためにこれを行うことができます。

4

3 に答える 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 に答える