【WPF】ListBox使用DataTemplate 以及默认选中第一项Item

ListBox中DataTemplate的用法如下 。

<ListBox x:Name="areaLB" ItemsSource="{Binding AreaNumList}" SelectedItem="{Binding SelectedItem}" BorderThickness="0" Background="White">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <RadioButton x:Name="radioBtn" FontSize="14" GroupName="area" Style="{StaticResource myRadioButton2}">
                <RadioButton.IsChecked>
                    <Binding Path="IsSelected" RelativeSource="{RelativeSource AncestorType=ListBoxItem}" Mode="TwoWay" />
                </RadioButton.IsChecked>
                <RadioButton.Content>
                    <Binding Path="Content" RelativeSource="{RelativeSource AncestorType=ListBoxItem}" Mode="TwoWay" />
                </RadioButton.Content>
            </RadioButton>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

需求:初始化时,使ListBox默认选中第一项。(否则将没有任一项被选中)

过程:由于ListBox使用了DataTemplate,一直是想办法如何去访问/获取到ListBox中的第一项,然后设置该项

RadioButton.isChecked = true

搜到不少类似下面这种方法的,如何从控件中递归找到子控件,都没法解决问题:

https://msdn.microsoft.com/en-us/library/bb613579.aspx

private childItem FindVisualChild<childItem>(DependencyObject obj)
    where childItem : DependencyObject
{
    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(obj, i);
        if (child != null && child is childItem)
            return (childItem)child;
        else
        {
            childItem childOfChild = FindVisualChild<childItem>(child);
            if (childOfChild != null)
                return childOfChild;
        }
    }
    return null;
}

最后才发现,直接把ListBox控件的选中项设为第一项即可!其实就是这么简单!!

listBox1.SelectedIndex = 0;

重要的参考:

http://stackoverflow.com/questions/8221795/selecting-first-item-in-listbox

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值