WPF

2016-07-07 5 views
0

にないウィンドウの境界線のサイズを変更しますこれは私のXAMLです:WPF

<Window x:Class="IPCapture.MainWindow" 
    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" 
    xmlns:local="clr-namespace:IPCapture" 
    mc:Ignorable="d" 
    Title="IPCapture_GUI" Opacity="0.95" Background="Transparent" Foreground="White" FontFamily="Arial" FontSize="14" FontWeight="Bold" FontStretch="UltraExpanded" TextOptions.TextFormattingMode="Display" BorderThickness="0" 
    Loaded="Window_Loaded" WindowStartupLocation="CenterScreen" Height="Auto" Width="Auto" Cursor="Arrow" WindowStyle="None" AllowsTransparency="True" MouseLeftButtonDown="Window_MouseLeftButtonDown" Topmost="True" ResizeMode="CanResizeWithGrip"> 
    <Window.OpacityMask> 
     <LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0"> 
      <GradientStop Color="Black"/> 
      <GradientStop Color="#B2420000" Offset="1"/> 
     </LinearGradientBrush> 
    </Window.OpacityMask> 
    <Border CornerRadius="5" Background="#FFC20C0C" HorizontalAlignment="Left" VerticalAlignment="Top" Width="Auto" Height="Auto"> 
     <Grid x:Name="GridMain" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0"> 
      <Grid.RowDefinitions> 
      </Grid.RowDefinitions> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition x:Name="Keys" Width="Auto"/> 
       <ColumnDefinition x:Name="Values" Width="Auto"/> 
      </Grid.ColumnDefinitions> 
     </Grid> 
     <Border.Effect> 
      <DropShadowEffect Opacity="0.6" BlurRadius="1"/> 
     </Border.Effect> 
    </Border> 
</Window> 

私は私が望んでいたと私は最終的に成功したGUIを達成するためにどのように多くのチュートリアルに従っ!しかし、それは私が必要とする機能を提供していないようです。

  • リサイズ GUI

私の問題の可視化:私はしたい

WPF

大色あせた青い部分は私のWindowで、それの左上隅にある小さなGUIが私の実際のウィジェットです。
(これはBorderで囲まれている)

あなたは私のコードからわかるように、私はWindowResizeMode="CanResizeWithGrip"設定しています。私はウィンドウを完全に細かくサイズ変更することができますBUT実際のGUIのサイズを変更しません。 (ので、私のXAMLのレイアウト方法の)

ので、このような理由のために、私は何とか代わりにWindowの境界線の幅にサイズを変更できるようにしたいです。

追加:(可能であれば)

  • はそれがWindowの上に中心だと、小さな黒いツールバーを削除することは可能ですか?
  • なぜ私はWindowAutoHeightWidthを設定しているので、それほど混乱していますか?それだけで内容を拡張する必要はありませんか?
+0

あなたの 'OnLoad'コードは何をしますか?あなたのグリッドに与えられた最小の高さ/幅のコードを私の環境に素早くコピー/ペーストすると、画面の残りの部分に透明なオーバーレイがない、ちょうど浮遊している赤いボックスが表示されます。私はVS 2010とWindows 7を使用しています。bgの色を透明から青に変更すると、サイズ変更グリップでフルウィンドウが表示されるか、Horizo​​ntalAlignment/VerticalAlignmentを削除すると、枠のサイズがウィンドウサイズに一致します。 – Rachel

答えて

2

のは、一度に1つのことを見てみましょう:あなたはGridBorderに設定したHorizontalAlignment="Left" VerticalAlignment="Top"のため

  • リサイズ問題があります。これは要素が最小必要幅を測定することを意味します。&高さと左上に揃えます。これを削除すると、要素は(他のレイアウトの問題がないと仮定して)ウィンドウ全体を含むようにサイズを変更します。

  • (ちなみに、デフォルトである)WidthHeightためAutoの設定ウィンドウに異なる動作を - 非公開のアルゴリズムを使用して(初期サイズを決定し、そうでない行うには - ないWPF - それはOSに指示しますそれに頼る)。 WPFでウィンドウのコンテンツの最小サイズを変更する場合は、SizeToContent="WidthAndHeight"と設定します。

  • 小さな黒いツールバーは新しいVS 2015機能であり、デバッグ中にのみ表示されます。あなたはVSのライブビジュアルツリーパネルでそれをオフにすることができます。

ボーナスのヒント:

  • 私は強く、全体のビジュアルツリーにEffectを適用するからあなたを阻みます。それは巨大なパフォーマンスヒットです。あなたはSystemDropShadowChromeを使用して調べる必要があります。

  • 同義語はOpacityMaskとなります。そのグラデーションが本当に必要な場合を除き、均一なOpacityを使用してください。均一な不透明度とグラデーションブラシをバックグラウンドとして使用する方が良いかもしれません。

+0

2/3人!私の唯一の問題は、ウィンドウのサイズを変更するときに、 'Height'と' Width'が 'Auto'に設定されているので、' Grid'の 'Width'も同様にサイズ変更されると思いました。私はこれが私の2列目と同じように動作していないことがわかります。グリッド行の内容は 'Horizo​​ntalAlignment =" Right "'に設定され、サイズ変更時にはそのまま残ります。これが別の問題を引き起こしたでしょうか?また、すべてのヒントの本当にappreaciative、ありがとう:) – wmash

+0

'ストレッチ'でないアライメントは、WPFが要素の最小サイズを取る原因になります。 –

+0

グリッド内のラベルの配置を削除して幅を広げても、グリッドは同じ幅のままで応答しないようです。 – wmash