トップ | puarts.com
ロゴ
「WPF」に関連する記事一覧
0  

WPF 透明なウィンドウを作る

2014/06/21
(2018/10/27 最終更新)

WPFで透明のウィンドウを作るサンプルです。AllowTransparency="True"にして、WindowStyle="None"にして、Backgroundに低いOpacityのブラシを設定してやると透明になります。


<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Height="350"
        Width="525"
        AllowsTransparency="True"
        WindowStyle="None">
    <Window.Background>
        <SolidColorBrush Opacity="0.5" Color="White"/>
    </Window.Background>
</Window>

WPFでキーのないグローバルなスタイルを上書きする方法をメモしておきます。BasedOn="{StaticResource {x:Type Button}}"でキーのないスタイルをオーバーライド出来るようです。


<Style TargetType="Button" x:Key="StandardButton" BasedOn="{StaticResource {x:Type Button}}">
    <Setter Property="Margin" Value="2 0 2 0"></Setter>
    <Setter Property="MinWidth" Value="80"></Setter>
    <Setter Property="Height" Value="30"></Setter>
</Style>

参考URL
http://stackoverflow.com/questions/1303634/how-to-override-a-global-style-that-doesnt-have-an-xkey-or-alternatively-ap

AvalonDockのDockingManagerでドキュメントのTitleをビューモデルにバインドする際に、Model.をつけてビューモデルのプロパティにアクセスしなければならないということに最初気が付かなくて少しはまったのでメモしておきます。


<avalonDock:DockingManager 
    DocumentsSource="{Binding DocumentViewModels}"
    x:Name="commandDockingManager">
    <avalonDock:DockingManager.LayoutItemContainerStyle>
        <Style TargetType="{x:Type avalonDock:LayoutItem}">
            <Setter Property="Title" Value="{Binding Model.Title}" />
        </Style>
    </avalonDock:DockingManager.LayoutItemContainerStyle>
    
    <avalonDock:DockingManager.LayoutItemTemplate>
        <DataTemplate>
            <TextBox />
        </DataTemplate>
    </avalonDock:DockingManager.LayoutItemTemplate>

    <avalonDock:LayoutRoot>
        <avalonDock:LayoutPanel Orientation="Vertical">
            <avalonDock:LayoutDocumentPane/>
        </avalonDock:LayoutPanel>
    </avalonDock:LayoutRoot>
</avalonDock:DockingManager>

C#で任意の座標にマウスポインタを移動し、クリックイベントを実行するWPFサンプルです。


MainWindow.xaml

<Window x:Class="MouseCommander.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="90" Width="250">
    <Window.Resources>
        <ResourceDictionary>
            <Style TargetType="Button">
                <Setter Property="Margin" Value="10 0 0 0"></Setter>
                <Setter Property="Width" Value="100"></Setter>
                <Setter Property="Height" Value="30"></Setter>
            </Style>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <StackPanel Orientation="Horizontal" 
                    Margin="10"
                    Height="30" HorizontalAlignment="Right" VerticalAlignment="Bottom">
            <Button Name="startButton" Click="StartButton_Click" >開始</Button>
            <Button Name="stopButton" Click="StopButton_Click">終了</Button>
        </StackPanel>
    </Grid>
</Window>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace MouseCommander
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
        private static extern void SetCursorPos(int X, int Y);

        [DllImport("USER32.dll", CallingConvention = CallingConvention.StdCall)]
        private static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        private const int MOUSEEVENTF_LEFTDOWN = 0x2;
        private const int MOUSEEVENTF_LEFTUP = 0x4;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void StartButton_Click(object sender, RoutedEventArgs e)
        {
            var stopButtonPosition = stopButton.PointToScreen(new Point(0, 0));
            SetCursorPos((int)stopButtonPosition.X + 1, (int)stopButtonPosition.Y + 1);
            mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
            mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);      
        }

        private void StopButton_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("終了");
        }
    }
}

WPF TextBoxでテキストの改行は&#xa;コードで出来るようです。すぐにわからなかったのでメモしておきます。


<TextBox Text="Hello,&#xa;world!" 
         AcceptsReturn="True" />
0  

0.0311 sec
にほんブログ村 ゲームブログ ファイアーエムブレムへ にほんブログ村 デザインブログ コンピュータグラフィックスへ

Copyright(C)2006-2018 wsp All Rights Reserved