2017-11-23 24 views
0

私は2つのチェックボックスを持つ小さなプログラムを持っています。WPFでウィンドウサイズを大きくするときの黒いバー

ウィンドウの高さは120です。ウィンドウの高さを確認すると、ウィンドウの高さは180に増加します。両方をチェックすると220になります。チェックを外すと、1つのチェックボックスで180に、チェックされます。

私はそれを平滑にします。つまり、私はwindowHeightOldとwindowHeightNewの差を計算し、それを30で割って30の小さなステップで増加させて滑らかに見えるようにします。

問題は、小さなウィンドウサイズの減少が大きく見えることです。増加すると、数ミリ秒間黒いバーが増加し、再び消滅する領域が増えます。残念ながら私はスクリーンショットを作ることができませんでした。

どこから来たのか、それを修正する方法はわかりません。ここで

ウィンドウの高さの増加/ decraseから切り取らコード:

private void CheckBoxSetup_Click(object sender, RoutedEventArgs e) 
    { 

if (CheckBoxSetup.IsChecked == false && CheckBoxUpdate.IsChecked == false) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 180; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
} 
if (CheckBoxSetup.IsChecked == true || CheckBoxUpdate.IsChecked == true) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 220; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
    //MainWindow1.MinHeight = 220; 

} 
if (CheckBoxSetup.IsChecked == true && CheckBoxUpdate.IsChecked == true) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 260; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
    //MainWindow1.MinHeight = 260; 

} 

if (CheckBoxSetup.IsChecked == true) 
{ 
    LabelDestinationSetup.Visibility = Visibility.Visible; 
    TextBoxDestinationpathSetup.Visibility = Visibility.Visible; 
    CheckCountSetup++; 
} 
else 
{ 
    LabelDestinationSetup.Visibility = Visibility.Hidden; 
    TextBoxDestinationpathSetup.Visibility = Visibility.Hidden; 
    CheckCountSetup--; 
} 
if (CheckCountSetup == 1) 
{ 
    LabelDestinationSetup.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop1, 0, 0); 

    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(160, thickTop2, 0, 0); 
} 
if (CheckCountSetup == 0 && CheckCountUpdate == 1) 
{ 
    LabelDestinationSetup.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop2, 0, 0); 

    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(160, thickTop1, 0, 0); 
} 
if (CheckCountSetup == 0) 
{ 
    LabelDestinationSetup.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop2, 0, 0); 

    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(160, thickTop1, 0, 0); 
} 
} 

private void CheckBoxUpdate_Click(object sender, RoutedEventArgs e) 
{ 
if(CheckBoxUpdate.IsChecked == true && CheckBoxFTP.IsChecked == false){ 
    CheckBox64Bit.IsEnabled = true; 
}else if(CheckBoxUpdate.IsChecked == false){ 
    CheckBox64Bit.IsEnabled = false; 
    CheckBox64Bit.IsChecked = false; 
} 
if (CheckBoxSetup.IsChecked == false && CheckBoxUpdate.IsChecked == false) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 180; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
    //MainWindow1.MinHeight = 180; 

} 
if (CheckBoxSetup.IsChecked == true || CheckBoxUpdate.IsChecked == true) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 220; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
    //MainWindow1.MinHeight = 220; 

} 
if (CheckBoxSetup.IsChecked == true && CheckBoxUpdate.IsChecked == true) 
{ 
    MainWindow1.MinHeight = 50; 

    OldWindowHeight = MainWindow1.Height; 
    int NewWindowHeigth = 260; 
    WindowDiff = NewWindowHeigth - OldWindowHeight; 
    WindowDiff = WindowDiff/30; 
    for (int a = 0; a < 30; a++) 
    { 
     OldWindowHeight = OldWindowHeight + WindowDiff; 
     MainWindow1.Height = OldWindowHeight; 
     MainWindow1.MinHeight = OldWindowHeight; 

    } 
    //MainWindow1.MinHeight = 260; 

} 
if (CheckBoxUpdate.IsChecked == true) 
{ 
    LabelDestinationUpdatepackage.Visibility = Visibility.Visible; 
    TextBoxDestinationpathUpdatePackage.Visibility = Visibility.Visible; 
    CheckCountUpdate++; 
} 
else 
{ 
    LabelDestinationUpdatepackage.Visibility = Visibility.Hidden; 
    TextBoxDestinationpathUpdatePackage.Visibility = Visibility.Hidden; 
    CheckCountUpdate--; 
} 
if (CheckCountUpdate == 1) 
{ 
    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(160, thickTop1, 0, 0); 

    LabelDestinationSetup.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop2, 0, 0); 
} 
if (CheckCountSetup == 1 && CheckCountUpdate == 0) 
{ 
    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(160, thickTop2, 0, 0); 

    LabelDestinationSetup.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop1, 0, 0); 
} 
if (CheckCountUpdate == 0) 
{ 
    LabelDestinationUpdatepackage.Margin = new Thickness(24, thickTop2, 0, 0); 
    TextBoxDestinationpathUpdatePackage.Margin = new Thickness(181, thickTop2, 0, 0); 

    LabelDestinationSetup.Margin = new Thickness(24, thickTop1, 0, 0); 
    TextBoxDestinationpathSetup.Margin = new Thickness(160, thickTop1, 0, 0); 
} 
} 

コードの長い行のために申し訳ありませんが、私は、洞察力を持っているnessecaryであると考えられています。

基本的に、これらの2つが異なる組み合わせでチェックされているかどうかをチェックします。それに応じてウィンドウの高さを増減します。チェックボックスがオンになっていると、チェックボックスに応じて表示または非表示に設定されているテキストボックスが表示されます。

基本的に2つの方法(チェックボックス1をクリックしてチェックボックス2をクリック)とその両方が同じように構築されます。クリックするとコンビネーションがチェックされ、それに応じてウィンドウの高さが設定され、それに応じたテキストボックスが表示または設定されます。

enter image description here

1チェックボックスにチェック:

0チェックボックスをチェックし

enter image description here

2つのチェックボックスがチェック:

enter image description here 私は十分にそれが良い説明を願っています。

+0

https://stackoverflow.com/questions/19554073/use-animation-to-change-window-size-in-wpfアニメーションを使用します、もっと簡単かもしれない –

答えて

0

XAML:

<Window x:Class=......... 
     DataContext="{StaticResource MainViewModel}" 
     Name="MyWindow" 
     > 

    <Window.Triggers > 
     <EventTrigger RoutedEvent="CheckBox.Unchecked" > 
      <BeginStoryboard > 
       <Storyboard > 
        <DoubleAnimation Storyboard.TargetName="MyWindow" Storyboard.TargetProperty = "(Window.Height)" Duration="0:0:0.5" To="{Binding WindowHeight}" RepeatBehavior="1x" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
     <EventTrigger RoutedEvent="CheckBox.Checked" > 
      <BeginStoryboard > 
       <Storyboard > 
        <DoubleAnimation Storyboard.TargetName="MyWindow" Storyboard.TargetProperty = "(Window.Height)" Duration="0:0:0.5" To="{Binding WindowHeight}" RepeatBehavior="1x" /> 
       </Storyboard> 
      </BeginStoryboard> 
     </EventTrigger> 
    </Window.Triggers> 

    <Grid Row="0" > 
     ............ 
     <CheckBox Grid.Column="4" 
        Content="UpadatePack" 
        IsChecked="{Binding PackegeCheck, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
        Name="CheckUpadatePack" /> 
     <CheckBox Grid.Column="5" 
        Content="Setup" 
        IsChecked="{Binding SetupCheck, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}" 
        Name="CheckSetup" /> 
     ...... 
    </Grid> 
    <Grid Row="5" Visibility="{Binding SetupDestinationVisibility, Converter={StaticResource BoolToVisibilityConverter}}" > 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="120"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Label Content="Setup Destination" Margin="5" Grid.Column="0"/> 
     <TextBox Margin="5" Grid.Column="1"/> 
    </Grid> 
    <Grid Row="6" Visibility="{Binding PackageDestinationVisibility, Converter={StaticResource BoolToVisibilityConverter}}"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="120"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Label Content="Package Destination" Margin="5" Grid.Column="0"/> 
     <TextBox Margin="5" Grid.Column="1"/> 
    </Grid> 

</Window> 

MainViewModel:

public class MainViewModel : ViewModelBase 
{ 

    private bool _sixtyFourBitCheck; 
    private bool _packegeCheck; 
    private bool _setupCheck; 
    private bool _ftpUploadCheck; 
    public int _windowHeight; 
    public int _origSize = 200; 


    public bool SixtyFourBitCheck 
    { 
     get => _sixtyFourBitCheck; 
     set 
     { 
      if (value == _sixtyFourBitCheck) return; 
      _sixtyFourBitCheck = value; 
      OnPropertyChanged(); 
     } 
    } 

    public bool PackegeCheck 
    { 
     get => _packegeCheck; 
     set 
     { 
      if (value == _packegeCheck) return; 
      _packegeCheck = value; 
      OnPropertyChanged(); 
      OnPropertyChanged(nameof(PackageDestinationVisibility)); 
      ChangeWindowsHeght(); 
     } 
    } 

    public bool SetupCheck 
    { 
     get => _setupCheck; 
     set 
     { 
      if (value == _setupCheck) return; 
      _setupCheck = value; 
      OnPropertyChanged(); 
      OnPropertyChanged(nameof(SetupDestinationVisibility)); 
      ChangeWindowsHeght(); 
     } 
    } 

    public bool FtpUploadCheck 
    { 
     get => _ftpUploadCheck; 
     set 
     { 
      if (value == _ftpUploadCheck) return; 
      _ftpUploadCheck = value; 
      OnPropertyChanged(); 
     } 
    } 

    public bool SetupDestinationVisibility => SetupCheck; 

    public bool PackageDestinationVisibility => PackegeCheck; 

    public int WindowHeight 
    { 
     get => _windowHeight; 
     set 
     { 
      if (value == _windowHeight) return; 
      _windowHeight = value; 
      OnPropertyChanged(); 
     } 
    } 

    public MainViewModel() 
    { 
     WindowHeight = _origSize; 
    } 

    private void ChangeWindowsHeght() 
    { 
     WindowHeight = _origSize; 
     if (PackageDestinationVisibility) 
      WindowHeight += 35; 
     if (SetupDestinationVisibility) 
      WindowHeight += 35; 
     OnPropertyChanged(nameof(WindowHeight)); 
    } 
} 
関連する問題