开发者

ListBoxDragDropTarget prevents ListBox from filling its parent control

开发者 https://www.devze.com 2023-01-07 14:11 出处:网络
Its extremely easy with the Silverlight Toolkit to enable basic drag and drop. http://silverlightfeeds.com/post/1325/Silverlight_Toolkit_adds_DragDrop_targets.aspx

Its extremely easy with the Silverlight Toolkit to enable basic drag and drop.

http://silverlightfeeds.com/post/1325/Silverlight_Toolkit_adds_DragDrop_targets.aspx

Unfortunately it seems that the wrapper ListBoxDragDropTarget screws up the normal default behavior of a ListBox w开发者_StackOverflowhich is to stretch itself to the parent control - such as a grid cell in this example.

<Grid Background="Yellow">

 <toolKit:ListBoxDragDropTarget AllowDrop="True">
      <ListBox x:Name="customerListBoxMain" 
               DisplayMemberPath="Name">
        <ListBox.ItemsPanel>
          <ItemsPanelTemplate>
            <StackPanel Orientation="Vertical"/>
          </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
      </ListBox>
    </toolKit:ListBoxDragDropTarget>

</Grid>

I end up here (after binding data to the ListBox) with a small listbox resized to fit its contents sitting in the middle of a yellow box.

No amount of HorizontalAlignment=Stretch etc. seems to be able to get it to fill the parent box.

How can I get the ListBox to fill the Grid?


ListBoxDragDropTarget is derived from content control. Just set HorizontalContentAlignment and VerticalContentAlignment.

.....


The best I have so far is listening for the size of the wrapper grid to change, and manually updating the size. (I couldn't get this working in XAML so had to use the event).

<Grid Name="myListBoxWrapper" SizeChanged="myListBoxWrapper_SizeChanged">               
  <controlsToolkit:ListBoxDragDropTarget AllowDrop="True">                  
    <ListBox x:Name="myListBox" >

and in code-behind:

private void myListBoxWrapper_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        myListBox.Width = myListBoxWrapper.ActualWidth;
        myListBox.Height = myListBoxWrapper.ActualHeight;
    }


As Archil said, setting HorizontalContentAlignment and VerticalContentAlignment is the way to go, but another way probably would be to bind Width and Height of ListBox to ActualWidth and ActualHeight of ListBoxDragDropTarget:

<toolkit:ListBoxDragDropTarget x:Name="dragdroptarget" AllowDrop="True">
    <ListBox x:Name="customerListBoxMain" 
        DisplayMemberPath="Name" 
            Width="{Binding ElementName=dragdroptarget, Path=ActualWidth}" 
            Height="{Binding ElementName=dragdroptarget, Path=ActualHeight}" >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
    </ListBox>
</toolkit:ListBoxDragDropTarget>
0

精彩评论

暂无评论...
验证码 换一张
取 消