2011-02-23 2 views
1

사용자가 WPF의 DataGrid에서 셀을 클릭하면 옆에 NumPad를 열려고합니다 (기본적으로 터치 기반 입력) . NumPad는 별도의 창으로 이해합니다.DataGrid (WPF)의 DataCell 바로 옆에 새 창 표시

1) 선택한 셀을 어떻게 알 수 있습니까?
2) 셀 옆에 NumPad를 표시하려면 어떻게합니까?
3) NumPad를 배치 할 셀의 좌표를 어떻게 찾을 수 있습니까?
4) NumPad 항목을 기준으로 셀 값을 어떻게 설정할 수 있습니까?

NumPad는 동일한 응용 프로그램에서 WPF 사용자 정의 컨트롤입니다. DataGrid는 .NET 4 컨트롤입니다. 은 일반 Windows 데스크톱 응용 프로그램

+0

몇 가지 질문 : 1) 어떤 종류의 NumPad에 대해 이야기하고 있습니까? 이것은 사용자 정의 컨트롤입니까? 또는 별도의 창에서 시작되는 외부 응용 프로그램? 또는 다른 것? 2) 이것은 일반적인 Windows 응용 프로그램입니까 아니면 모바일 응용 프로그램입니까? 3) 기본 .NET4 DataGrid 또는 상용 .NET DataGrid (예 : Infragistics, Xceed ...)를 사용합니까? – gehho

+0

@gehho : 질문을 업데이트했습니다. – neebz

답변

8

이 사소한 일이 아니다 당신이 이러한 목표를 달성하기 위해 WPF의 일부 지식을 가지고 있어야하지만 여기에 대해 당신이 어떻게 보일지 몇 가지 아이디어입니다 :

  1. DataGridCell.IsSelected 속성을 알려줍니다 셀이 선택되었는지 여부.
  2. Popup을 사용하면 셀 외에도 ​​NumPad를 직접 표시 할 수 있습니다.
  3. Popup을 사용하는 경우 좌표가 필요하지 않지만 Popup.Placement 속성을 사용하여 상대 배치를 지정할 수 있습니다. 이 MSDN 문서를 참조하십시오. Popup Placement Behavior
  4. NumPad에서 DataGridCell의 사용자 정의 컨트롤로 바인딩을 사용할 수 있습니다. 사용

DataGrid.CellStyle 또는 DataGridColumn.CellStyle 프로퍼티는 데이터 그리드 또는 일부 특정 열의 모든 셀에 대한 대체 스타일을 지정할 수 있습니다. 이 스타일에서는 템플릿을 변경하고 Popup을 추가 할 수 있으며 현재 셀이 선택된 경우에만 열립니다. Popup.IsOpen 속성을 DataGridCell.IsSelected 속성에 바인딩하여 쉽게이 작업을 수행 할 수 있습니다.

이것은 단지 초기 아이디어 일뿐입니다. 제공된 MSDN 링크를 살펴보고 WPF에 대한 다른 내용도 읽어야합니다. 이 'WPF 방식'(즉, XAML)을 배우는 데 약간의 시간이 걸릴지 모르지만, 현재 선택된 셀을 결정하기 위해 코드 숨김을 많이 사용하는 것보다 내 위치에서 컨트롤을 올바른 위치에 배치하는 것이 훨씬 쉽습니다. NumPad에서 셀로 데이터를 전송하는 등 ...

+0

감사합니다. 코드 숨김을 사용하는 것이 좋습니다. 다른 질문에서는 TransformtoAncestor를 사용하여 DataCell의 좌표를 찾은 다음 새 창을 옆에 배치하는 것에 대해 언급했습니다. 나는 이상한 좌표를 얻지 만. 무슨 일이 일어나고 있는지 잘 모르겠다. 내가 이해가 안되는 점은 WPF에서 이것이 왜 그렇게 어렵고 Winforms (그리고 심지어 HTML/CSS조차도)에서 케이크 조각이었던 이유이다. – neebz

+0

어쩌면 코드를 게시해야합니다. 그렇지 않으면 문제를 찾는 데 도움이되지 않습니다. – gehho

+0

@nEEbz이 답변에서 무엇을 놓치셨습니까? 그것은 당신이 요구 한 정확히는 아니지만 문제에 대한 해결책이며 이것은 wpf 방법입니다 (나는 또한 그렇게하는 것이 좋습니다). 또한 그것은 어렵지 않습니다. 이 답변에 대한 구체적인 질문이있는 경우 - 추가로 질문하십시오! wpf를 처음 접한다면 더 많은 것을 읽고이 솔루션을 작동 시키십시오. btw : 많은 사람들이 winforms에서 오는 코드를 뒤에 괜찮아. 많은 mvvm 열광 자들은 그렇지 않습니다. –

3

저는 Gehho의 대답을 정말 좋아합니다. 그가 제안 스타일링 텍스트 열을 통해 템플릿 열을 사용하는 외에, 수행, 다음 XAML 결과 :이 도움이

<Grid x:Name="LayoutRoot"> 
     <DataGrid> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="R" Binding="{Binding Color.R}" /> 
       <DataGridTextColumn Header="G" Binding="{Binding Color.G}" /> 
       <DataGridTextColumn Header="B" Binding="{Binding Color.B}" /> 
       <DataGridTextColumn Header="Alpha" Binding="{Binding Color.A}" /> 
       <DataGridTemplateColumn Header="Thumb"> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Border x:Name="border" Background="{Binding}"> 
           <Popup IsOpen="{Binding IsMouseOver, ElementName=border, Mode=OneWay}" 
             PopupAnimation="Fade" 
             Placement="MousePoint"> 
            <Border Width="200" Height="200" Background="{Binding Background , ElementName=border, Mode=OneWay}" /> 
           </Popup> 
          </Border> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 
      <SolidColorBrush Color="Red"/> 
      <SolidColorBrush Color="Green"/> 
      <SolidColorBrush Color="Blue"/> 
      <SolidColorBrush Color="Yellow"/> 
      <SolidColorBrush Color="SteelBlue"/> 
      <SolidColorBrush Color="Lime"/> 
      <SolidColorBrush Color="Cyan"/>    
     </DataGrid> 
    </Grid> 
</Window> 

희망을!