ガントチャート作成日記

備考があるときだけ付箋っぽい画像を表示してカーソルが当たったら備考を表示するようにしたいなーと思ったので実装してみた。
慣れて着たら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 件のコメント:

コメントを投稿

PowerShellでEdgeを自動化(インストール不要。参考:郵便追跡サービス自動操作)

1.経緯について  RPAのソフトをインストールできないので、これまでVBSでCreateObjectでブラウザの自動操作をすることがたまにあった。 ※いざというときの手札として持っているだけで安心感が段違い  見た目上IEがインストールされていなくても、CreateObject...