Sto tentando di utilizzare un SelectButton (https://gist.github.com/loraderon/580405) ma è necessario specificare MinWidth per esso. Altrimenti la larghezza è solo la larghezza di Extender. Rimuovere ColumnSpan o impostare la prima colonna Auto non sta facendo il trucco. Mi piacerebbe che avesse sempre la larghezza dell'elemento più largo nel simbolo list + extender.Come fare un "SelectButton" con Button, Extender e ListBox per avere la larghezza di cui ha bisogno?
<UserControl x:Class="loraderon.Controls.SelectButton"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:my="clr-namespace:loraderon.Controls"
mc:Ignorable="d"
SizeChanged="UserControl_SizeChanged"
d:DesignHeight="30" d:DesignWidth="100">
<Grid
x:Name="SplitGrid"
>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="23" />
</Grid.ColumnDefinitions>
<Button
x:Name="Button"
Click="Button_Click"
Grid.ColumnSpan="2"
Padding="0"
HorizontalContentAlignment="Left"
>
<ContentControl
x:Name="ButtonContent"
HorizontalContentAlignment="Center"
ContentTemplate="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=ItemTemplate}"
/>
</Button>
<Expander
x:Name="Expander"
Expanded="Expander_Expanded"
Collapsed="Expander_Collapsed"
Grid.Column="1"
VerticalAlignment="Center"
IsExpanded="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=IsExpanded}"
/>
<Popup
IsOpen="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=IsExpanded}"
PlacementTarget="{Binding ElementName=Button}"
PopupAnimation="Fade"
StaysOpen="False"
>
<ListBox
x:Name="ListBox"
SelectionMode="Single"
SelectionChanged="ListBox_SelectionChanged"
SelectedIndex="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=SelectedIndex, Mode=TwoWay}"
ItemTemplate="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=ItemTemplate}"
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:SelectButton}}, Path=ItemsSource}"
/>
</Popup>
</Grid>
</UserControl
EDIT: La finestra ho messo il controllo ha avuto:
SizeToContent="WidthAndHeight"
che ha portato entrambe le risposte che seguono non al lavoro. C'è una soluzione più robusta che funzionerebbe quando si posiziona il pulsante in una varietà di controlli/contenitori? Sembra che il modo in cui è stato costruito il controllo non sia molto robusto. Popup non essendo la parte dell'albero visuale lo rende una cattiva scelta.
Non è possibile impostare la larghezza su di esso quando lo si utilizza? –
kenny
grazie per la risposta, ma ovviamente no. non posso sapere per quanto tempo gli oggetti sono in diverse lingue. più il controllo dovrebbe dimensionare correttamente il contenuto se la dimensione non è specificata. –
Forse è possibile introdurre alcune proprietà di stiramento orizzontale sul controllo utente e sulla griglia. – kenny