2

と同じようFluent.RibbonWindowに、ウィンドウのキャプション/境界線に固定するためのコントロールが必要です。
クラスからを抽出しようとしRibbonWindowましたが、いつも問題が発生します。私はそれをすることができません...
誰かがこれで私を助けることができますか?
基本的に、ウィンドウのクライアント領域をウィンドウ全体に拡張する必要があります。フレームをクライアント領域に拡張するのではなく
、クライアント領域をフレームに拡張する必要があります。

4

2 に答える 2

2

カスタムクロム機能を使用すると、アプリケーションでウィンドウの外枠を制御できるため、WPFコンテンツをタイトルバーに描画できます。

それはあなたが探しているもののように聞こえます:WPFシェル統合ライブラリ

于 2011-06-12T21:32:46.357 に答える
1

私はかつて、Outlookスタイルのボタンを、フレームのない最上部の透明なウィンドウに配置することで、非クライアント領域に追加しました。

これは、そのウィンドウが継承した基本クラスです。

public class WindowHeaderButton : Window
{
    private readonly Window _owner;

    public WindowHeaderButton(Window owner)
    {
        _owner = owner;
        _owner.Loaded += owner_Loaded;
        _owner.LocationChanged += owner_LocationChanged;
        _owner.StateChanged += owner_StateChanged;
        _owner.SizeChanged += owner_SizeChanged;
        _owner.Deactivated += _owner_Deactivated;
        _owner.Activated += _owner_Activated;
        Activated += WindowHeaderButton_Activated;
        SizeToContent = SizeToContent.WidthAndHeight;
        WindowStyle = WindowStyle.None;
        AllowsTransparency = true;
        Background = new SolidColorBrush(Colors.Transparent);
        ShowInTaskbar = false;
    }

    void WindowHeaderButton_Activated(object sender, System.EventArgs e)
    {
        Opacity = 1;
    }

    void _owner_Activated(object sender, System.EventArgs e)
    {
        Opacity = 1;
    }

    void _owner_Deactivated(object sender, System.EventArgs e)
    {
        Opacity = 0.75;
    }

    private void owner_Loaded(object sender, RoutedEventArgs e)
    {
        Owner = _owner;
        Show();
        UpdatePosition();
    }

    private void owner_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        UpdatePosition();
    }

    private void owner_StateChanged(object sender, System.EventArgs e)
    {
        UpdatePosition();
    }

    private void owner_LocationChanged(object sender, System.EventArgs e)
    {
        UpdatePosition();
    }

    private void UpdatePosition()
    {
        Top = _owner.Top + 1;
        Left = _owner.Left + 8;
    }
}

お気づきのように、アクティビティのステータスや場所の変更など、多くのウィンドウの動作を自分で処理する必要があります。これは簡単に少し厄介になる可能性があります。

于 2011-06-12T21:57:14.923 に答える