metal_man
metal_man

Reputation: 672

WPF Radio button hit area

Hi I have yet another problem with WPF controls. I have a code:

<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>

The problem is that when i hit RadioButton or its label it gets selected. That is fine. But ListBoxItem width is bigger than whole RadioButton hit area and when I click on the right of the control - ListBoxItem selects but its child RadioButton does not. And how to expand the RadioButton hit area?

One idea that i tried was to add a Label as the RadioButton content. It wasn't the best idea because it made my app work slow.

Upvotes: 2

Views: 1408

Answers (1)

Sheridan
Sheridan

Reputation: 69959

Try this:

<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>

You said:

Unfortunatelly this does not work

Unfortunately, you are mistaken. I have simplified the example and have just tested that it works perfectly (at least in Visual Studio 2010 and .NET 4):

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

Just try this code out in a new project and you will see that it does work as expected. Therefore, if it does not work in your current project, then you have some other code that is somehow conflicting with this ListBox. Unfortunately, there's really nothing that I can do about that.

Upvotes: 3

Related Questions