C# 翻译DataGrid MouseeEvent,使我的视图中没有代码';s代码隐藏

C# 翻译DataGrid MouseeEvent,使我的视图中没有代码';s代码隐藏,c#,wpf,xaml,mvvm,datagrid,C#,Wpf,Xaml,Mvvm,Datagrid,我有一个工作代码,其中一个Datagrid作为主控件。 我使用了Datagrid,因为它很容易将数据绑定到其中 我的代码需要将单元格移动到其他列中,因此我总是需要在单击鼠标以及释放鼠标时检查我在哪个单元格上 我当前的实现工作正常。 但是,我检查行和单元格的方法是通过视图的代码隐藏。 我的项目负责人正在寻找一种替代方法,通过绑定来完成这项工作,因为他希望视图的代码尽可能干净。 我已经尝试了所有我能做的,但是我找不到可以同时提供cells列和行索引的属性 请参阅下面的代码。(省略了一些列,因为它会超

我有一个工作代码,其中一个
Datagrid
作为主控件。 我使用了Datagrid,因为它很容易将数据绑定到其中

我的代码需要将单元格移动到其他列中,因此我总是需要在单击鼠标以及释放鼠标时检查我在哪个单元格上

我当前的实现工作正常。 但是,我检查行和单元格的方法是通过视图的代码隐藏。 我的项目负责人正在寻找一种替代方法,通过绑定来完成这项工作,因为他希望视图的代码尽可能干净。 我已经尝试了所有我能做的,但是我找不到可以同时提供cells列和行索引的属性

请参阅下面的代码。(省略了一些列,因为它会超出限制。)

XAML

<UserControl x:Class="Widget5.View.WorkItemsDisplay"
             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:converter="clr-namespace:Widget5.Converter"             
             mc:Ignorable="d" 
             d:DesignHeight="630" Width="690" Padding="0" Margin="0">

    <UserControl.Resources>
        <converter:RowNumberConverter x:Key="rowNumberConverter" />
        <converter:HourSlotToBrushConverter x:Key="hourSlotColorConverter" />

    </UserControl.Resources>

    <Grid Margin="0" Width="690" HorizontalAlignment="Left" MouseRightButtonUp="Grid_MouseRightButtonUp" MouseUp="Grid_MouseUp">
        <Grid.RowDefinitions>
            <RowDefinition Height="24"></RowDefinition>
            <RowDefinition></RowDefinition>
            <!--<RowDefinition Height="30"></RowDefinition>-->
        </Grid.RowDefinitions>

        <!--<Grid HorizontalAlignment="Left" Height="24" VerticalAlignment="Bottom" Grid.Row="2"
              Width="680">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="5" />
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="2" />
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="2" />
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="50" />
                <ColumnDefinition Width="10" />
            </Grid.ColumnDefinitions>
            <Button Grid.Column="1" Width="48"
                    Command="{Binding AddCommand}">Add</Button>
            <Button Grid.Column="3" Width="48"
                    Command="{Binding DeleteCommand}">Delete</Button>
            <Button Grid.Column="5" Width="48"
                    Command="{Binding SaveCommand}">Save</Button>
            <Button Grid.Column="7" Width="48"
                    Command="{Binding RefreshCommand}">Refresh</Button>
        </Grid>-->

        <Grid HorizontalAlignment="Left" Height="24" VerticalAlignment="Top" Width="690" Grid.Row="0"
              Background="LightGray">

            <Grid.Resources>
                <Style TargetType="{x:Type TextBlock}">
                    <Setter Property="FontSize" Value="10"/>
                </Style>
            </Grid.Resources>

            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="22"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="123"/>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
                <ColumnDefinition Width="20"/>
            </Grid.ColumnDefinitions>
            <Border Grid.Column="0" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="1" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="2" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="3" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="4" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="5" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="6" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="7" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="8" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="9" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="10" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="11" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="12" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="13" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="14" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="15" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="16" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="17" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="18" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="19" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="20" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="21" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="22" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="23" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="24" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="25" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="26" BorderThickness="1,1,0,1" BorderBrush="Black"/>
            <Border Grid.Column="27" BorderThickness="1,1,1,1" BorderBrush="Black"/>

            <TextBlock Text="NO" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0" FontSize="12"/>
            <TextBlock Text="削" HorizontalAlignment="Center" Grid.Column="1" VerticalAlignment="Center" Margin="0" FontSize="12"/>
            <TextBlock Text="中項目名称" Grid.Row="0" Grid.Column="2" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0" FontSize="12"/>
            <TextBlock Text="回数" HorizontalAlignment="Center" Grid.Column="3" VerticalAlignment="Center" Margin="0" FontSize="12"/>
            <TextBlock Text="5" Grid.Row="0" Grid.Column="4" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="6" Grid.Row="0" Grid.Column="5" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="7" Grid.Row="0" Grid.Column="6" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="8" Grid.Row="0" Grid.Column="7" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="9" Grid.Row="0" Grid.Column="8" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="10" Grid.Row="0" Grid.Column="9"  HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="11" Grid.Row="0" Grid.Column="10" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="12" Grid.Row="0" Grid.Column="11" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="13" Grid.Row="0" Grid.Column="12" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="14" Grid.Row="0" Grid.Column="13" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="15" Grid.Row="0" Grid.Column="14" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="16" Grid.Row="0" Grid.Column="15" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="17" Grid.Row="0" Grid.Column="16"  HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="18" Grid.Row="0" Grid.Column="17" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="19" Grid.Row="0" Grid.Column="18" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="20" Grid.Row="0" Grid.Column="19" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="21" Grid.Row="0" Grid.Column="20" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="20" Grid.Row="0" Grid.Column="21" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="23" Grid.Row="0" Grid.Column="22"  HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="0" Grid.Row="0" Grid.Column="23" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="1" Grid.Row="0" Grid.Column="24" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="2" Grid.Row="0" Grid.Column="25" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="3" Grid.Row="0" Grid.Column="26" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
            <TextBlock Text="4" Grid.Row="0" Grid.Column="27" HorizontalAlignment="Center" VerticalAlignment="Center"  Margin="0"/>
        </Grid>

        <DataGrid Name="ScheduleDG" ItemsSource="{Binding ScheduleTable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      Grid.Row="1" AutoGenerateColumns="False"  HeadersVisibility="None"
                      IsReadOnly="False" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" 
                      SelectionUnit="CellOrRowHeader" SelectionMode="Extended" Padding="0" FontSize="10" BorderThickness="1" BorderBrush="Black" HorizontalAlignment="Left" Width="690"
                      Margin="0,-1,-2,0" Height="Auto" AllowDrop="True" RowHeight="18" 
                      PreviewMouseLeftButtonUp="ScheduleTable_PreviewMouseLeftButtonUp" 
                      PreviewMouseLeftButtonDown="ScheduleTable_PreviewMouseLeftButtonDown" MouseMove="ScheduleDG_MouseMove">
            <!--<i:Interaction.Triggers>
                <i:EventTrigger EventName="MouseLeftButtonUp">
                    <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                    Path=DataContext.CellSelectedCommand}"
                                    CommandParameter="{Binding SelectedCells, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
                </i:EventTrigger>
                <i:EventTrigger EventName="MouseLeftButtonDown">
                    <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                    Path=DataContext.StartCellCommand}"
                                    CommandParameter="{Binding CurrentCell, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
                </i:EventTrigger>
                <i:EventTrigger EventName="MouseRightClick">
                    <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
                                    Path=DataContext.RightClickCommand}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>-->

            <DataGrid.Columns>
                <DataGridTextColumn Header="NO" Width="22" IsReadOnly="True">
                    <DataGridTextColumn.HeaderStyle>
                        <Style TargetType="{x:Type DataGridColumnHeader}">
                            <Setter Property="FontSize" Value="10" />
                            <Setter Property="Margin" Value="0"/>
                        </Style>
                    </DataGridTextColumn.HeaderStyle>
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource rowNumberConverter}">
                            <Binding />
                            <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}" />
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
                <DataGridTemplateColumn Header="削">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox x:Name="TestCheckBox" VerticalAlignment="Center" HorizontalAlignment="Center"
                                      IsChecked="{Binding isSelected, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Header="中項目名称" Binding="{Binding TaskName}" Width="123"/>
                <DataGridTextColumn Header="回数"  Width="30"/>

                <!--<DataGridTemplateColumn Header="5" MaxWidth="10">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Background="{Binding _5, Converter={StaticResource  ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"
                                     IsEnabled="False">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="PreviewMouseDown">
                                        <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGrid}},
                                            Path=DataContext.StartCellCommand}"
                                            CommandParameter="{Binding CurrentCell, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" />
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </TextBlock>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>-->

                <DataGridTextColumn Header="5" MaxWidth="10" FontSize="8" Width="10" IsReadOnly="True">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _5, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

                <DataGridTextColumn Header="" MaxWidth="10" IsReadOnly="True">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _5_5, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

                <DataGridTextColumn Header="6" MaxWidth="10" IsReadOnly="True">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _6, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

                <DataGridTextColumn Header="" MaxWidth="10" IsReadOnly="True" >
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _3_5, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

                <DataGridTextColumn Header="4" MaxWidth="10" IsReadOnly="True" >
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _4, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

                <DataGridTextColumn Header="" MaxWidth="9"  IsReadOnly="True">
                    <DataGridTextColumn.ElementStyle>
                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="Background" Value="{Binding _4_5, Converter={StaticResource ResourceKey=hourSlotColorConverter}, UpdateSourceTrigger=PropertyChanged}"/>
                            <Setter Property="Margin" Value="-1" />
                        </Style>
                    </DataGridTextColumn.ElementStyle>
                </DataGridTextColumn>

            </DataGrid.Columns>
        </DataGrid>

    </Grid>


</UserControl>

隐藏的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using System.ComponentModel.Composition;
using MainModule.Infrastructure.Interface;
using Widget5.ViewModel;

namespace Widget5.View
{
    /// <summary>
    /// Interaction logic for ExcelDisplay.xaml
    /// </summary>
    [Export(typeof(IMainModulePage))]
    [ExportMetadata("WidgetName", "Widget5")]
    [ExportMetadata("MenuNo", 1)]
    [ExportMetadata("PageTitle", "WorkItemsPage")]
    public partial class WorkItemsDisplay : UserControl, IMainModulePage
    {
        public WorkItemsDisplay()
        {
            DataContext = eVM;
            InitializeComponent();
        }

        // inherit
        public string WidgetName
        {
            get { return "Widget5"; }
        }

        public int MenuNo
        {
            get { return 1; }
        }

        public string PageTitle
        {
            get { return "WorkItemsPage"; }
        }

        ExcelGridViewModel eVM = new ExcelGridViewModel();
        bool isClicked;
        List<int> trueCells;
        bool hasMoved;

        private void ScheduleTable_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            // iteratively traverse the visual tree
            while ((dep != null) &&
                    !(dep is DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            if (dep is DataGridCell)
            {
                DataGridCell cell = dep as DataGridCell;
                DataGridCellInfo cellInfo = new DataGridCellInfo(cell);

                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                DataGridRow row = dep as DataGridRow;

                hasMoved = false;

                if (eVM.DoEndCell(cell, row, hasMoved))
                    ScheduleDG.UnselectAllCells();
                ScheduleDG.CurrentCell = cellInfo;

            }

            isClicked = false;

        }

        private void ScheduleTable_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;


            // iteratively traverse the visual tree
            while ((dep != null) &&
                    !(dep is DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            if (dep is DataGridCell)
            {
                DataGridCell cell = dep as DataGridCell;

                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                DataGridRow row = dep as DataGridRow;

                trueCells = eVM.DoStartCell(cell, row);
            }

            isClicked = true;
        }

        private void Grid_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
        {
            e.Handled = true;
        }

        private void ScheduleDG_MouseMove(object sender, MouseEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            // iteratively traverse the visual tree
            while ((dep != null) &&
                    !(dep is DataGridCell))
            {
                dep = VisualTreeHelper.GetParent(dep);
            }

            if (dep == null)
                return;

            if (dep is DataGridCell)
            {
                DataGridCell cell = dep as DataGridCell;
                DataGridCellInfo cellInfo = new DataGridCellInfo(cell);

                while ((dep != null) && !(dep is DataGridRow))
                {
                    dep = VisualTreeHelper.GetParent(dep);
                }

                DataGridRow row = dep as DataGridRow;

                if (isClicked && (trueCells.Count <= 1))
                {
                    hasMoved = true;
                    eVM.DoEndCell(cell, row, hasMoved);
                }
            }
        }

        private void Grid_MouseUp(object sender, MouseButtonEventArgs e)
        {
            isClicked = false;
            hasMoved = false;
        }


    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用System.ComponentModel.Composition;
使用MainModule.Infrastructure.Interface;
使用Widget5.ViewModel;
命名空间Widget5.View
{
/// 
///ExcelDisplay.xaml的交互逻辑
/// 
[导出(类型(IMainModulePage))]
[ExportMetadata(“WidgetName”、“Widget5”)]
[ExportMetadata(“MenuNo”,1)]
[ExportMetadata(“页面标题”、“工作项页面”)]
公共部分类工作项显示:UserControl,IMainModulePage
{
公共工作项显示()
{
DataContext=eVM;
初始化组件();
}
//继承
公共字符串WidgetName
{
获取{return“Widget5”;}
}
梅努诺公共酒店
{
获取{return 1;}
}
公共字符串页面标题
{
获取{return“WorkItemsPage”;}
}
ExcelGridViewModel eVM=新的ExcelGridViewModel();
布尔被舔;
列出真实细胞;
布尔搬家了;
私有void ScheduleTable_PreviewMouseLeftButtonUp(对象发送器,鼠标按钮ventargs e)
{
DependencyObject dep=(DependencyObject)e.OriginalSource;
//迭代遍历可视化树
while((dep!=null)&&
!(dep是DataGridCell))
{
dep=VisualTreeHelper.GetParent(dep);
}
if(dep==null)
返回;
if(dep是DataGridCell)
{
DataGridCell=dep作为DataGridCell;
资料
public static DependencyProperty OnEnterKeyDownProperty = DependencyProperty.RegisterAttached("OnEnterKeyDown", typeof(ICommand), typeof(TextBoxProperties), new UIPropertyMetadata(null, OnOnEnterKeyDownChanged));

public static ICommand GetOnEnterKeyDown(DependencyObject dependencyObject)
{
    return (ICommand)dependencyObject.GetValue(OnEnterKeyDownProperty);
}

public static void SetOnEnterKeyDown(DependencyObject dependencyObject, ICommand value)
{
    dependencyObject.SetValue(OnEnterKeyDownProperty, value);
}

public static void OnOnEnterKeyDownChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
    TextBox textBox = dependencyObject as TextBox;
    if (e.OldValue == null && e.NewValue != null) textBox.PreviewKeyDown += TextBox_OnEnterKeyDown;
    else if (e.OldValue != null && e.NewValue == null) textBox.PreviewKeyDown -= TextBox_OnEnterKeyDown;
}

private static void TextBox_OnEnterKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter || e.Key == Key.Return)
    {
        TextBox textBox = sender as TextBox;
        ICommand command = GetOnEnterKeyDown(textBox);
        if (command != null && command.CanExecute(textBox)) command.Execute(textBox);
    }
    e.Handled = false;
}