이것은 정말 기본적인 요구 사항이지만 막혀 있습니다! WPF/.Net의 경우 - ListView의 Canvas 열을 동적으로 그립니다. 하나 개의 실패한 시도 : 내 코드 내부ListView 안에 포함 된 캔버스 위젯을 그리는 법
<ListView name="myGridView">
<GridViewColumn Header="ColumnA" DisplayMemberBinding="{Binding Path=ColumnA}" />
<GridViewColumn DisplayMemberBinding="{Binding Path=ColumnB}">
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SUSPECT!
<Canvas Name="canvasColumn" Width="100" Height="20" />
</GridViewColumn>
</GridView>
, 나는 비 캔버스의 ListView 열에 바인딩 필드 클래스 "을 MyData"가. ListView에 약간의 "무엇이든"의 작성 항목을 통해 내가 루프 :
foreach (Whatever whatever in whatevers)
{
MyData myData = new MyData();
myData.ColumnA = whatever.A;
myData.ColumnB = new Canvas();
Line line = new Line();
line.Stroke = System.Windows.Media.Brushes.Black;
line.X1 = line.Y1 = 1;
line.X2 = line.Y2 = 100;
line.StrokeThickness = 1;
myData.ColumnB.Children.Add(line);
myListView.Items.Add(myData);
}
이 작동하지 않습니다 : 화면의 캔버스 열의 모든 행은 텍스트 "System.Windows.Controls.Canvas"를 표시합니다. 대단히 놀랍지도 않습니다. 텍스트 열과 같은 방식으로 열을 바인딩했으며 typename의 일부 toString 변환이 시작되는 것 같습니다. 그러나 다른 것들을 시도했지만 Canvas를 표시 할 수 없습니다.
나는 또한 열을 제거하는 시도리스트 뷰를 통해 캔버스 위젯 형태의, 즉 뭔가를 참조 할 수있는 방법 모색 "SUSPECT"위에 표시하고, MYDATA의 COLUMNB 필드 바인딩 :
myListView.reference-to-new-row-and-canvas-column = theNewCanvasIDrewOn;
일부를 내 검색의 스타일이 엉망이되어 버렸습니다. ItemPanel 설정 등 : 제발, 적어도 필요한 경우 최소한 유지할 수 있기를 바랍니다.
모든 안내가 크게 감사드립니다.
건배, 토니
내 목적을 위해은, 최소한의 솔루션은 App.xaml의에 Application.Resources 태그에 DataTemplate을 추가 할 것으로 보인다 UPDATE :
<DataTemplate x:Key="myTemplate">
<Canvas Width="60" Height="20" Background="Red" ClipToBounds="True" >
<ContentPresenter Content="{Binding myCanvasField}" />
</Canvas>
</DataTemplate>
와 GridViewColumn을 정의 예 :
<GridViewColumn CellTemplate="{StaticResource myTemplate}" Header="title" />
올바른 방향으로 나를 가리켜 주신 딘에게 감사 드리며 캔버스 관련 세부 사항은 Binding to Canvas으로 보내주십시오. 그런 다음 ListView에 추가하는 객체의 Canvas 속성 멤버를 "그려"갑니다.
어떤 그림이 있습니까? –
@Dmitry : 목록보기에는 "작업"이 표시되고 시작 날짜, 약속 된 배달 날짜, 예상 배달 날짜 등 막대 그래프가 표시됩니다. 기본적으로 작업 진행 상황을 한 눈에 확인합니다. . 나중에 나는 더 좋아질 수 있고 휴일/휴가 기간 또는 무언가를 나타 내기를 원할 것입니다 .... –
캔버스에 "그림 그리기"에 대해 말하면, 실제로 WPF를 "얻지"않습니다. WPF는 WinForms의 페인트 이벤트와 매우 다른 유지 모드 그래픽을 사용합니다. WPF의 Canvas는 그리기 화면이 아닌 레이아웃 패널입니다. Canvas를 "그리지"마십시오. 컨트롤/요소를 추가합니다. 곡면을 "그리기"하려면 DrawingGroup 또는 WriteableBitmap을 살펴보십시오. –