11

境界内にあり、MDI クライアント領域の前に表示されるメッセージがあります。これは単なるメッセージなので、IsHitTestVisiblefalse に設定します。便宜上、ユーザーがボタンをクリックするだけで新しいダイアグラムを開始できるように、ボタンも含めました。

ただし、境界線は にIsHitTestVisible設定されているため、ボタンFalseの値が不足しているTrueため、ユーザーはボタンをクリックできません。

とはいえ、コントロールの子の 1 つがマウス イベントを受信できるようにしながら、コントロールをマウスから見えないようにするにはどうすればよいでしょうか。

スクリーンショットは次のとおりです。

ここに画像の説明を入力

テキストのある青い領域をヒット テストで非表示にしたいのですが、ボタンは引き続き押すことができるようにしたいと考えています。考え?(そして、はい、2 つの項目をグリッドに積み重ねることについては既に知っていますが、それではレイアウトが台無しになります。

4

3 に答える 3

1

わかりました、質問が尋ねられたように解決できるようには見えません。したがって、階層化された方法に戻る必要があるようです。その場合、テキストの変更を補うために、ボタンの垂直方向の配置を下に設定し、境界線の下端または TextBlock の下マージンに追加のパディングがあることを確認して、ラベルが常に上に浮くようにする必要があります。ボタン。同じ原則を使用して、両方のサイド マージン/パディングを管理します。

これで目的のものが得られますが、かなり面倒に思えます。繰り返しになりますが、IsHitTestVisible (または IsEnabled については IsEnabled) を「Force」で指定して、何らかの方法でそれら (およびその下) を動作の所有者として再確立する方法があればいいのにと思います。人は夢を見ることができます。それまでは…レイヤーだ!

于 2013-01-09T07:40:33.460 に答える
1

知る限り、できません。ただし、IsEnabledProperty を使用して実行できますが、それでも少し回避策があります。次のような独自のボタンを作成する必要があります。

2013 年 9 月 1 日編集:

 public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        DataContext = this;
    }

    private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
    {
        MessageBox.Show("hello");
    }
}

public class MyButton : Button
{
    static MyButton()
    {
        IsEnabledProperty.OverrideMetadata(typeof(MyButton),
        new UIPropertyMetadata(true,(o, args) => { },(o, value) => value));
    }
}

XAML:

<BorderIsEnabled="False">
    <wpfApplication2:MyButton Margin="61,95,88,100" Click="ButtonBase_OnClick">Open a new diagram</wpfApplication2:MyButton>
</Border>
于 2013-01-08T16:44:43.713 に答える