Привет, у меня есть еще одна проблема с элементами управления 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
. Это была не лучшая идея, потому что это заставило мое приложение работать медленно.
Попробуй это:
<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
. К сожалению, я ничего не могу с этим поделать.