2011-08-14 15 views
3

Windows 7では、Sticky Notesアプリケーションを模倣しようとしています。元のアプリケーションで、テキストをSticky Noteに入力するとテキストが大きくなりすぎます行数)をウィンドウに収めるには、一度に1行ずつ垂直方向に自動的に拡大され、余裕を持たせます。つまり、通常のテキストボックスで垂直スクロールバーが表示され、テキストが下にスクロールして(最初の行が見えなくなる)スティッキーノートでは、スクロールバーが表示されないようにテキストボックスがテキストに収まるように正確に展開されます。もちろん、後で手動でウィンドウのサイズを変更すると、スクロールバーが表示されます。テキストが長すぎると、テキストボックスが自動的に垂直方向に展開されます

Windows 7の場合は、Sticky Notesアプリケーションを開き、拡大するまで数行を付箋に入力してください。

私はこの効果を模倣しようとしていますが、私は運がないです。問題は、実際のWindowはTextBoxだけでなく、サイズ変更する必要があるようです(WPFがこのように動作するとは思わない、子要素のサイズ変更が親要素を大きくすることができますか?右?)。この時点でウィンドウの

内容は、以下のとおりです。

<Window Background="Transparent" BorderBrush="Transparent"> 
    <!-- Transparent border to draw dropshadow on --> 
    <Border Background="Transparent" BorderBrush="Transparent"> 
     <!-- Grid with UI elements --> 
     <Grid Margin="5" Background="Transparent"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="27" />  
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 

      <!-- Stickynote header --> 
      <Border ... /> 

      <!-- Content --> 
      <Border Grid.Row="1"> 

       <TextBox Text="{Binding ContentText}" ... /> 

      </Border> 
     </Grid> 
    </Border> 
</Window> 

誰が、私はこの効果を達成することができます方法を知っていますか?ありがとう!

+0

テキストボックスの幅を「自動」に設定しようとしています – sll

答えて

2

TransparentWindowあなたは(TransparentWindow.cs)OnDragDeltatransparentWindow.SizeToContent = SizeToContent.Manualを追加し、掲載

でそれを使用するにはウィンドウプロパティ SizeToContent="Height"

サンプル

<Window ... 
     MaxHeight="500" 
     SizeToContent="Height"> 
    <Border Background="Transparent" BorderBrush="Transparent"> 
     <Grid Margin="5" Background="Transparent"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="27" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 
      <Border Grid.Row="1"> 
       <TextBox AcceptsReturn="True" MinHeight="100"/> 
      </Border> 
     </Grid> 
    </Border> 
</Window> 

編集 をお試しください

private static void OnDragDelta(object sender, DragDeltaEventArgs e) 
{ 
    TransparentWindow transparentWindow = (TransparentWindow)sender; 
    Thumb thumb = e.OriginalSource as Thumb; 
    transparentWindow.SizeToContent = SizeToContent.Manual; 
    if (thumb != null && transparentWindow.WindowState == WindowState.Normal) 
    { 
     //... 
    } 
} 
+0

これはうまくいくようですが、重大な問題があります。私のウィンドウに問題があるようですが、私はこの透明なサイズ変更可能なボーダーレスウィンドウコードを使用しています(私のウィンドウはTransparentWindowを継承しています):http://archive.msdn.microsoft.com/getwpfcodebywillhan/Release/ProjectReleases.aspx?ReleaseId= 1578 通常のウィンドウでは正常に動作しますが、何らかの理由でこのサイズ変更可能なウィンドウが機能しません。 Heightプロパティを手動で設定している可能性がありますか?私は手がかりがありません... –

+1

私の答えを更新しました。サブクラス化されたWindowでは、サイズ変更時に 'SizeToContent'を' Manual'にリセットする必要があります。それを試して、それがあなたに希望の結果を与えるかどうか教えてください。 –

+0

ありがとう、それはうまくいくようです。私は今日までそれをテストすることはできません、私はあなたに知らせるでしょう。 –

関連する問題