2017-06-19 19 views
0

私はウィンドウを左に、右に広げる。ウィンドウを左と右に広げるが、メインコンテンツを同じ位置に保つ

簡体例:私はすでにWPF - Expand Window to the Leftの表情を持っていた

enter image description here

:ここ

<Window x:Class="Application1.Windows.Test" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" 
    Title="MainWindow" 
    SizeToContent="Width" Height="250"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto" />    <!--Expander LEFT--> 
      <ColumnDefinition Width="25"/> 
      <ColumnDefinition Width="175" />    <!--Red Content --> 
      <ColumnDefinition Width="25"/> 
      <ColumnDefinition Width="Auto"/>    <!--Expander RIGHT--> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="25"/> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="25"/> 
     </Grid.RowDefinitions>  
    <Expander Grid.Column="0" 
       Grid.Row="0" 
       Grid.RowSpan="3" 
       Margin="5" 
       ExpandDirection="Left"> 
     <Grid Width="200">     
     </Grid> 
    </Expander> 
    <Grid Grid.Column="2"     
      Grid.RowSpan="3" 
      Background="Red"/> 
     <Expander Grid.Column="4" 
        Grid.Row="0" 
        Grid.RowSpan="3" 
        Margin="5" 
        ExpandDirection="Right"> 
     <Grid Width="200"> 
     </Grid> 
    </Expander> 
    </Grid> 

あなたはどのような問題がある見ることができます。

解決策の種類は動作しますが、それは問題の半分を解決するだけです。

Left and Rightの操作方法は?

UPDATE

  • 私はパンダの列が固定されないようにします。彼らはうまく動作しますエキスパンダー

答えて

0

一つのアプローチは、これがあるために必要な最小限のスペース表示される必要があります。

(しかし、私は何とかこの解決策に不満だ)を格納するためにEnumを作成します。最後のアクション:

public enum ExpandActions 
{ 
    ExpandRight, 
    ExpandLeft, 
    CollapsRight, 
    CollapseLeft 
} 

は、その後、私は私のにExpand & Collapseのハンドラを追加しましたxamlの210。

WPF - Expand Window to the Leftのようにウィンドウに最後にSizeChangedを上書きします。

左に拡大するときのみ、この動作が必要です。それ以外の場合は、「右への展開」動作を停止します。

protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) 
{ 
    if (!sizeInfo.WidthChanged) 
    { 
     base.OnRenderSizeChanged(sizeInfo); 
     return; 
    } 

    Hide(); 
    base.OnRenderSizeChanged(sizeInfo); 

    //Last action was on left expander 
    if(_lastAction == ExpandActions.CollapseLeft || _lastAction == ExpandActions.ExpandLeft) 
    { 
     Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width); 
    }      
    Show(); 
} 

これは、画面外の拡張を処理できる点です。

それは動作しますが、私はそれが最良の解決策ではないと思います。それは私にはかなりきちんと見え、素晴らしい解決策であるべき

enter image description here

+0

結果がこれです。 PS、あなたの問題を示すあなたのアニメーションが好きです:P –

関連する問題