慣れて着たらWPFはやりたいと思ったことをさくっと作れるので すごいと思う。
<ユーザーコントロール>
PopUpNote.xaml
<UserControl x:Class="ProjectManager.Controls.PopUpNote"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:ProjectManager.Controls"
mc:Ignorable="d" >
<!--フィルタ内容を選択するためのPopUpコントロール-->
<Popup Name="popupInfomation" StaysOpen="False" Width="200" Height="180">
<Border BorderBrush="Black" BorderThickness="0.5" Margin="0" Padding="0">
<DockPanel Margin="0">
<TextBox BorderBrush="Black" Name="txtNotes" Background="LightYellow" x:FieldModifier="public" IsReadOnly="false" IsEnabled="True"></TextBox>
</DockPanel>
</Border>
</Popup>
</UserControl>
/// <summary>
/// PopUpNote.xaml の相互作用ロジック
/// </summary>
public partial class PopUpNote : UserControl
{
public PopUpNote()
{
InitializeComponent();
}
private bool _isOpen = false;
public bool IsOpen
{
get { return _isOpen; }
set { _isOpen = value; popupInfomation.IsOpen = _isOpen; }
}
#region 添付プロパティ
#region Notes
/// <summary>
/// ヘッダに表示する文字列
/// DataGridFilterTextColumnHeaderクラスのHeaderTextプロパティに値を渡すための添付プロパティ
/// </summary>
//public string Notes
//{
// get { return base.GetValue(NotesProperty) as string; }
// set { base.SetValue(NotesProperty, value); }
//}
public string Notes
{
get { return (string)this.GetValue(PopUpNote.NotesProperty); }
set { this.SetValue(PopUpNote.NotesProperty, value); }
}
public static DependencyProperty NotesProperty = DependencyProperty.RegisterAttached(
"Notes", typeof(string),
typeof(PopUpNote), new PropertyMetadata(string.Empty,
new PropertyChangedCallback((sender, e) =>
{
(sender as PopUpNote).OnNotesPropertyChanged(sender, e);
})));
private void OnNotesPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
if (e.NewValue == null) { return; }
this.txtNotes.Text = e.NewValue.ToString();
}
#endregion
#endregion
<呼び出し側>
<!-- ***情報*** -->
<GridViewColumn Header="Info" Width="30" HeaderContainerStyle="{StaticResource GridViewColumnHeaderStyle}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<!-- Marginで左右から-6pxとしないとHearder部のタイトルとラインの位置がずれる.GridViewの既知の不具合 -->
<Border BorderBrush="Black" BorderThickness="0,0,0.5,0" Margin="-6,0,-6,0">
<DockPanel >
<Image x:Name="popTriger" MouseEnter="popup_MouseEnter" Source="Images/postit.png" Visibility="{Binding Memo,Converter={StaticResource visibilityConverter}}"></Image>
<csControls:PopUpNote x:Name="popup" Notes="{Binding Memo}" IsEnabled="True" >
</csControls:PopUpNote>
</DockPanel>
</Border>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
実装例
すごいなーと思ったけど、ポップアップの中のテキストボックスが触れない。
貼り付けはできるっぽいけど・・・。簡単に調べた限りじゃわからんかった。
まぁいいってことにして少し使ってみてやっぱり変更したくなったら修正するようにしようと思う。
0 件のコメント:
コメントを投稿