0

Silverlight ChildWindowが移動するのを防ぐための優れたソリューションはありますか?

ありがとう、マーク

4

3 に答える 3

1

あなたがこれをきちんと呼ぶかどうかはわかりませんが...

  • 新しいテンプレートコントロールを自分で作成し、それを呼び出しますImmovableChildWindow
  • 継承元のクラスをに変更しますChildWindow
  • Themes / generic.xamlを開くと、の初期スタイルが見つかりますImmoveableChildWindow
  • Silverlightのドキュメントには、ChildWindowの既存のテンプレートがChildWindow StylesandTemplatesにあります。
  • スタイルの既存のTargetType値に注意してくださいImmovableChildWindow
  • 'n'をコピーして、ChildWindowのデフォルトスタイル全体をドキュメントからthemes/generic.xamlファイルに貼り付けます。
  • このコピーを既存のスタイルTargetTypeと同じ値に置き換えます。ImmovaleChildWindow
  • これで、初期スタイルを削除できます。現在ターゲットにしているChildWindowスタイルの大きなコピーのみを残しImmovableChildWindowます。
  • Templateセッター内で検索し、TargetTypeのをスタイルと同じ値に変更しますTargetType
  • テンプレートを検索して、 ChromeBorderという名前のを見つけます。属性を削除します。(これは私たちが本当に求めているものです)。x:Name="Chrome"

これで、新しいChildWindowアイテムを作成すると、デフォルトでフォームが継承されますChildWindow。移動できないようにする場合は、代わりに継承するように変更する必要がありますImmovableChildWindow(分離コードのベースタイプとxamlのルートタグ名を変更します)。

子ウィンドウを移動できるようにする「Chrome」という名前のChildWindowイベントをに添付します。FrameWorkElementただし、正常に動作するテンプレートコントロールであるため、「Chrome」と呼ばれるものが見つからない場合は、FrameworkElementその機能がなくても機能し続けます。

于 2010-04-20T18:46:23.180 に答える
1

代わりに、新しいクラスを作成する必要はありません

  1. 次の場所からスタイルをコピーします:http://msdn.microsoft.com/en-us/library/dd833070%28VS.95%29.aspx

  2. 与えるx:key="stylename"

  3. のコンストラクターでChildwindow、次のコードを前に貼り付けますInitializeComponent

    this.Style = App.Current.Resources["childWindow"] as Style;

上記の解決策は私の問題を解決しました

于 2011-12-06T13:34:09.930 に答える
0

たぶん、この簡単な方法を試すことができます。グリッドを作成して、ChildWindow内のすべてのコンテンツをワープします。

<Grid Margin="0">

<!--Your ChildWindow. Canvas, Grid, Textblock...Whatever-->

</Grid>

グリッドのマージンは0であるため、グリッドをクリックして移動することはできません。

于 2011-03-15T15:09:11.857 に答える