1.コピーコマンド
戻るCopyCommand
この画面の使い方は、「コピー元」に入力をして、「CopyCommand」ボタンをクリックしますと、「コピー先」にコピーされます。画面は下記の通りです。
CopyCommand
クリックすると拡大します
ZAMLは下記の通りです。
16~23行目は、WindowChromeのShellの宣言
25~32行目は、WindowのResourceの宣言
38~70行目は、InteractionTriggerの宣言
75~98行目は、WindowChromeの描画
111~113行目は、コピー元の宣言
115~117行目は、コピー先の宣言
119~120行目は、Buttonの宣言
※ButtonのStyle="{StaticResource CommandTemplate}" Foreground="White" は自分の
作成内容によって違えて下さい。
View
<ccl:CustomChromeWindow
x:Class="LivetWPFChromeSupportDesk1.Views.Window8"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell="http://schemas.microsoft.com/winfx/2006/xaml/presentation/shell"
xmlns:ccl="clr-namespace:CustomChromeLibrary;assembly=CustomChromeLibrary"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
xmlns:core="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
xmlns:v="clr-namespace:LivetWPFChromeSupportDesk1.Views"
xmlns:vm="clr-namespace:LivetWPFChromeSupportDesk1.ViewModels"
WindowStartupLocation="CenterScreen"
Title="Window8" Height="714" Width="1035">
<shell:WindowChrome.WindowChrome>
<shell:WindowChrome
ResizeBorderThickness="6"
CaptionHeight="43"
CornerRadius="0,0,0,0"
GlassFrameThickness="0">
</shell:WindowChrome>
</shell:WindowChrome.WindowChrome>
<Window.Resources>
<ResourceDictionary>
<vm:CaptionButtonRectToMarginConverter x:Key="CaptionButtonMarginConverter"/>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Resources/Styles2.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Window.DataContext>
<vm:ViewModel8/>
</Window.DataContext>
<i:Interaction.Triggers>
<!--WindowのContentRenderedイベントのタイミングでViewModelのInitializeメソッドが呼ばれます-->
<i:EventTrigger EventName="ContentRendered">
<l:LivetCallMethodAction MethodTarget="{Binding}" MethodName="Initialize"/>
</i:EventTrigger>
<l:InteractionMessageTrigger
MessageKey="MessageKey2" Messenger="{Binding Messenger}">
<l:TransitionInteractionMessageAction
WindowType="{x:Type v:Window2}" Mode="Modal"/>
</l:InteractionMessageTrigger>
<l:InteractionMessageTrigger
MessageKey="MessageKey10" Messenger="{Binding Messenger}">
<l:TransitionInteractionMessageAction
WindowType="{x:Type v:Window10}" Mode="Modal"/>
</l:InteractionMessageTrigger>
<!-- 下記がないと、タスクバーが1つにならない -->
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding Path=Loaded}"
CommandParameter="{Binding Mode=OneTime,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Closing">
<i:InvokeCommandAction Command="{Binding Path=Closing}"
CommandParameter="{Binding Mode=OneTime,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type Window}}}"/>
</i:EventTrigger>
<l:InteractionMessageTrigger MessageKey="Close" Messenger="{Binding Messenger}">
<l:WindowInteractionMessageAction/>
</l:InteractionMessageTrigger>
</i:Interaction.Triggers>
<!-- Grid-1 -->
<Grid>
<!-- WindowChrome Start -->
<Border Grid.RowSpan="2" BorderThickness="3" BorderBrush="Black">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
<Border BorderThickness="3,3,3,1" BorderBrush="Black" Margin="{Binding Path=CaptionButtonMargin}">
<Border.Background>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="Black" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</LinearGradientBrush>
</Border.Background>
<!--Window Icon and Title-->
<StackPanel Orientation="Horizontal" Margin="0" VerticalAlignment="Top">
<TextBlock Text=" Help Desk" FontFamily="Calibri" FontWeight="Bold" FontSize="26" Foreground="Blue" />
</StackPanel>
</Border>
<ccl:CaptionButtons />
<!-- WindowChrome End -->
<!-- Grid-2 -->
<!--Content-->
<Grid Grid.Row="1">
<!-- ★★★ -->
<Grid>
<TextBox Text="{Binding Path=txt本日}" TextAlignment="Center"
Foreground="White" Background="Black"
Height="17" HorizontalAlignment="Center" Name="txt本日"
VerticalAlignment="Top" Width="81" Margin="809,3,123,0" />
<Label Content="コピー元" Foreground="White" Height="22" HorizontalAlignment="Left" Margin="48,60,0,0" Name="label1" VerticalAlignment="Top" Width="106" />
<TextBox Text="{Binding Path=txtCopy1, Mode=TwoWay}" Background="Black" Foreground="White" Height="23" HorizontalAlignment="Left"
Margin="152,62,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />
<Label Content="コピー先" Foreground="White" Height="22" HorizontalAlignment="Left" Margin="48,101,0,0" Name="label2" VerticalAlignment="Top" Width="106" />
<TextBox Text="{Binding Path=txtCopy2, Mode=TwoWay}" Background="Black" Foreground="White" Height="23" HorizontalAlignment="Left"
Margin="152,100,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" />
<Button Command="{Binding CopyCommand1}" Style="{StaticResource CommandTemplate}" Foreground="White"
Content="CopyCommand" Height="40" HorizontalAlignment="Left" Margin="332,65,0,0" Name="button16" VerticalAlignment="Top" Width="187" />
</Grid>
<!-- ★★★ -->
</Grid>
</Grid>
</ccl:CustomChromeWindow>
ViewModelは下記の通りです。
ViewModel【抜粋】
class ViewModel8 : ViewModel
{
#region 変更通知プロパティ
//-----------------------------------------------
public string txt本日 { get; set; }
public string txtCopy1 { get; set; }
//
private string _txtCopy2;
public string txtCopy2
{
get { return _txtCopy2; }
set
{
_txtCopy2 = value;
RaisePropertyChanged("txtCopy2");
}
}
//-----------------------------------------------
#endregion
#region CopyCommand1
//-----------------------------------------------------
/// <summary>
/// Copy処理のコマンドを定義します。
/// </summary>
private ViewModelCommand _copyCommand1;
public ViewModelCommand CopyCommand1
{
get
{
if (this._copyCommand1 == null)
{
this._copyCommand1 = new ViewModelCommand(CopyExecute,
CanCopyExecute);
}
return this._copyCommand1;
}
}
/// <summary>
/// Copy処理が実行可能かどうかの判定を行います。
/// </summary>
private bool CanCopyExecute()
{
return true;
}
/// <summary>
/// Copy処理のコマンドの実行を行います。
/// </summary>
private void CopyExecute()
{
txtCopy2 = txtCopy1;
}
//--------------------------------------------------
#endregion
