WPF单选按钮命中区域

时间:2014-06-11 11:03:11

标签: c# wpf xaml wpf-controls

您好我还有WPF控件的另一个问题。我有一个代码:

<ListBox Margin="0, 5, 0, 0" ItemsSource="{Binding mySource, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- Rabio template -->
            <RadioButton GroupName="radiosGroup"
                 Margin="10, 2, 5, 2"
                 Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedSetting}"
                 CommandParameter="{Binding SomeId, Mode=OneWay}"
                 Content="{Binding FileNameWithoutExtensions, Mode=OneWay}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

问题在于,当我点击RadioButton或其标签时,它会被选中。那样就好。但ListBoxItem宽度大于整个RadioButton点击区域,当我点击控件右侧时,ListBoxItem会选择,但其子RadioButton不会。以及如何扩展RadioButton点击区域?

我尝试过的一个想法是添加Label作为RadioButton内容。这不是最好的主意,因为它使我的应用程序运行缓慢。

1 个答案:

答案 0 :(得分:2)

试试这个:

<ListBox Margin="0,5,0,0" ItemsSource="{Binding mySource, Mode=OneWay, 
    UpdateSourceTrigger=PropertyChanged}" SelectionMode="Single"
    HorizontalContentAlignment="Stretch"> <!-- New Property Added Here -->
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!-- Rabio template -->
            <RadioButton GroupName="radiosGroup"
                 Margin="10, 2, 5, 2"
                 Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedSetting}"
                 CommandParameter="{Binding SomeId, Mode=OneWay}"
                 Content="{Binding FileNameWithoutExtensions, Mode=OneWay}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

你说:

  

不幸的是,这不起作用

不幸的是,你错了。我已经简化了示例并且刚刚测试了它的完美运行(至少在Visual Studio 2010和.NET 4中):

<ListBox ItemsSource="{Binding Collection}" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <RadioButton GroupName="Group" Content="{Binding SomeProperty}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

只需在新项目中尝试使用此代码,您就会发现 按预期工作。因此,如果它在您当前的项目中不起作用,那么您有一些其他代码与此ListBox有些冲突。不幸的是,我无能为力。