| 

.NET C# Java Javascript Exception

9
Hallo Zusammen,

ich habe ein Grid (nennen wir es "LayoutRoot"), mit zwei Spalten, dessen erste Spalte mit Width="*" gesetzt ist und eine Spalte mit Width="Auto".
Grund: Innerhalb der Spalten sind jeweils ein ContentControl enthalten. Das ContentControl in der zweiten Spalte wird bei Bedarf ein und ausgeblendet. Wenn das zweite ContentControl ausgeblendet wird, soll das erste über die gesamte Breite angezeigt werden. Das ist soweit mal kein Problem und funktioniert tadellos, da die erste Spalte soweit aufgedrückt wird, dass die zweite nicht mehr sichtbar ist. Bingo.

In beide ContentControls werden nun per Prism jeweils ein Control geladen, welches ein Grid enthält(default: Width="Auto"). Dieses Grid enthält wiederum ein ein weiteres Element, dessen HorizontalAlignement auf Stretch steht.
Ds Resultat ist nun, dass (sobald die Controls in den ContentControls geladen werden) die zweite Spelte des "LayoutRoots" so weit aufgedrückt wird, dass die erste Spalte nicht mehr sichtbar ist. Logisch: Width="Auto" passt sich dem Content an.

Meine Frage ist nun:
Wie löse ich relativ simpel das Problem, dass die Funktionalität des "LayoutRoots" erhalten bleibt (Erste Spalte immer sichtbar! Zweite kann ein und ausgeblendet werden.) Und dass ich jedes beliebige Control in die ContentControls laden kann?
News:
27.10.2011
Jürgen Gutsch 1,2k 1 5 7
2 Antworten
5
Ich hab mal eine Animation auf die Columnbreite eines Grid gesetzt. Vielleicht könntest du das ähnlich lösen. Hier ein bissle Code dazu:


<UserControl.Resources>
<Storyboard x:Name="Storyboard1">
<DoubleAnimation From="0" To="300" Duration="0:0:0.15" Storyboard.TargetName="userControl" Storyboard.TargetProperty="ColumnWidth" />
</Storyboard>
<Storyboard x:Name="Storyboard2">
<DoubleAnimation From="300" To="0" Duration="0:0:0.15" Storyboard.TargetName="userControl" Storyboard.TargetProperty="ColumnWidth" />
</Storyboard>
</UserControl.Resources>



<Grid x:Name="LayoutRoot" Background="White">

<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="Column1" Width="*" />
<ColumnDefinition x:Name="Column2" Width="400" />
<ColumnDefinition x:Name="Column3" Width="Auto" />
</Grid.ColumnDefinitions>


<StackPanel x:Name="border1" Grid.Column="0" Background="Blue">
<Button Content="einblenden" Height="25" Width="50" Click="Button_Click" />
<Button Content="ausblenden" Height="25" Width="50" Click="Button_Click_1" />
</StackPanel>

<Border x:Name="border2" Grid.Column="1" Background="Red">

</Border>

<Border x:Name="border3" Grid.Column="2" Background="Black">

</Border>

</Grid>


public partial class MainPage : UserControl
{
//VB Code: http://programmerpayback.com/2008/11/08/animate-collapsing-a-grid-column-or-row-in-silverlight/

private static readonly DependencyProperty ColumnWidthProperty = DependencyProperty.Register("ColumnWidth", typeof(double), typeof(MainPage),
new PropertyMetadata(ColumnWidthChanged));

private double ColumnWidth
{
get { return (double)GetValue(ColumnWidthProperty); }
set { SetValue(ColumnWidthProperty, value); }
}

private static void ColumnWidthChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((MainPage)d).Column3.Width = new GridLength((double)e.NewValue);
}

public MainPage()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
Storyboard1.Begin();
}

private void Button_Click_1(object sender, RoutedEventArgs e)
{
Storyboard2.Begin();
}
}
27.10.2011
Mario Priebe 6,0k 3 9
Vielen Dank, Mario. Das wäre eine Möglichkeit. Ich beschränke mich jetzt erstmal damit, dass ich die Breite der Spalte, je nachdem, ob das entsprechende ContentControl ausgeblendet wird, oder angezeigt wird. von "Auto" auf "*" stelle.
Jürgen Gutsch 27.10.2011
1
Also mir fällt dazu momentan Grid.MinWidth ein. Damit lässt sich doch die minimal zulässige Breite festlegen. Eine Möglichkeit wäre doch, wenn du der ersten Spalte eine entsprechende Breite gibst, die dann auch nicht unterschritten wird.
28.10.2011
Joachim 3,1k 4 9

Stelle deine .net-Frage jetzt!