Entwickler-Ecke

WPF / Silverlight - ListBoxItem DataTemplate mit Autosize?


Christoph1972 - Sa 21.12.13 14:40
Titel: ListBoxItem DataTemplate mit Autosize?
Hallo Foris,

ich bastele gerade rum und komme an einer Stelle nicht so recht weiter. Und zwar habe ich für eine ListBox ein ControlTemplate erstellt, in diesem Control befand sich bis vor hin ein Expander, welcher weitere Controls zur Bearbeitung der Daten bereitstellt. Wenn der der Expander expandiert wurde, so vergrößerte sich das ListBoxItem wie erwartet automatisch. An dem Expander hat mich jedoch das Verhalten gestört, das er mit einem Einfachklick expandierte. Also musste ein Expander her der nur auf ein Doppelklick reagiert her. Ich habe mich an diesem Beispiel orientiert:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/9c97474a-c087-4936-a25b-7c61146d297b/double-click-expander-control-header

Bei diesem UserControl ist es leider so, das sich die Größe von dem ListBoxtem leider nicht anpasst. Bis jetzt konnte ich keinen Workaround finden um das zu realisieren.

Hat jemand eine Idee wie ich das ohne Codebehind hinbekomme?

Vielen Dank schon mal!


Christian S. - Sa 21.12.13 15:45

Hallo!

Ich kann das Problem nicht reproduzieren. Ich habe den C#-Quelltext von der verlinkten Seite und folgenden XAML-Quelltext:

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
<Window xmlns:WpfApplication1="clr-namespace:WpfApplication1"  x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
  <Window.Resources>
    <ResourceDictionary
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:local="clr-namespace:WpfApplication1">
      <Style TargetType="{x:Type local:ExpanderEx}" x:Key="ExpanderExStyle">
        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
        <Setter Property="VerticalContentAlignment" Value="Stretch"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:ExpanderEx}">
              <Border SnapsToDevicePixels="true" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="3">
                <DockPanel>
                  <ContentControl
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    x:Name="HeaderSite"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                    DockPanel.Dock="Top"
                    Content="{TemplateBinding Header}"/>
                  <ContentPresenter
                    Focusable="false"
                    Visibility="Collapsed"
                    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                    Margin="{TemplateBinding Padding}"
                    x:Name="ExpandSite"
                    VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                    DockPanel.Dock="Bottom"/>
                </DockPanel>
              </Border>
              <ControlTemplate.Triggers>
                <Trigger Property="IsMouseDoubleClicked" Value="True">
                  
                  <Setter Property="Visibility" TargetName="ExpandSite" Value="Visible"/>
                  <Setter Property="IsExpanded" Value="True"/>
                </Trigger>
              </ControlTemplate.Triggers>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </Style>
    </ResourceDictionary>


  </Window.Resources>
  <Grid>
    <ListBox>
      <ListBox.Items>
        <ListBoxItem>
          <WpfApplication1:ExpanderEx Style="{DynamicResource ExpanderExStyle}" Header="Mein Expander" IsExpanded="True">
            <TextBlock Text="Foobar" />
          </WpfApplication1:ExpanderEx>
        </ListBoxItem>
        <ListBoxItem>
          <TextBlock Text="Drunter!" />
        </ListBoxItem>
      </ListBox.Items>
    </ListBox>


  </Grid>
</Window>


Und da wächst das ListBoxItem mit.

Grüße
Christian


Christoph1972 - Sa 21.12.13 21:31

Asche auf mein Haupt :oops: Ich hatte Height für den Expander festgelegt, dann klappt das natürlich nicht. Sorry, aber da bin ich einfach nicht drauf gekommen, ich habe alles unter die Lupe genommen, das habe ich zu spät gesehen :roll: Wie peinlich.....

Trotzdem vielen Dank! Jetzt hole ich mir noch schnell eine Flasche Wein und dann gehts hoffentlich kreativ weiter :wave: