내 프로그램의 사용자가 내 ListView/GridView에서보고 싶은 열을 스스로 결정할 수 있기를 바랍니다. 이를 위해WPF : 내 열에 ColumnHeader를 찾는 방법?
는 I 하나 (이 열의 폭을 유지 유형 Double
의 LastWidth
라고하고, 다른 하나 (에 열 및 오프 전환 공개) 형 Boolean
의 IsColumnVisible
라고, GridViewColumn
두 부착 특성을 만들 때 그것을 마지막으로 보았습니다).
속성 IsColumnVisible
은 OnChangedCallback
입니다. 속성이 False
로 설정하면
, 나는 속성이 True
로 설정하면, 내가로부터 열의 마지막 폭을 얻을 내 재산 LastWidth
의 열의 현재 폭을 저장하고 0
현재 너비를 설정 내 속성 LastWidth
을 입력하고 현재 너비를 해당 값으로 설정합니다.
이것은 지금까지는 작동하지만 결함으로 인해 마우스로 숨겨진 열의 크기를 다시 조정할 수 있습니다. 따라서 세 개의 열이 있고 가운데 열을 숨기는 경우 마우스로 첫 번째 열의 크기를 조정하면 두 번째 열이 다시 표시됩니다.
IsEnabled
상태를 숨겨진 열 머리글의 상태를 False
으로 설정하려면이 문제를 해결해야합니다.
의 내 열이 (숨겨진 열 1과 4 볼, 열 2, 3)과 같은 XAML에 정의되어 있다고 가정 해 봅시다 : 내 재산 IsColumnVisible
의 기본 값이 내 OnChangedCallback
True
때문에
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="Column 1" Width="50" DisplayMemberBinding="{Binding Column1}" local:GridViewColumnConfig.IsColumnVisible="True" />
<GridViewColumn Header="Column 2" Width="50" DisplayMemberBinding="{Binding Column2}" local:GridViewColumnConfig.IsColumnVisible="False" />
<GridViewColumn Header="Column 3" Width="50" DisplayMemberBinding="{Binding Column3}" local:GridViewColumnConfig.IsColumnVisible="False">
<GridViewColumn.Header>
<GridViewColumnHeader Content="Column 4" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Header="Column 4" Width="50" DisplayMemberBinding="{Binding Column4}" local:GridViewColumnConfig.IsColumnVisible="True" />
</GridView>
속성은 내가 OnChangedCallback
입력 GridViewColumn
의 객체를 가지고 내 GridViewColumn
의 GridViewColumnHeader
을 결정하는 데 필요한 열 머리글의 IsEnabled
상태를 설정 할 수 있도록 열 2
3. 동안 실행 .
GridViewColumn
의 유형은 Object
인 Header
입니다. 열 2의 경우이 속성에는 String
"열 2"가 포함되며 열 3의 경우이 속성은 Nothing
입니다.
내 GridViewColumn
의 헤더를 GridViewColumnHeader
개체로 가져 오는 방법이 있습니까?
Header
속성 값에
Content
있어 설정 한 다음이 객체에
Header
속성을 설정하는
GridViewColumnHeader
객체에게 자신을 만들 수 있습니다.
하지만 그럴 필요가 없다면 이러한 변경을하지 않을 것입니다.
3 열의 경우 이미 XAML에서 정의한 바대로 GridViewColumnHeader
개체가 있어야하지만 찾을 수 없습니다.
이미 시각 트리를 걸려고했지만 GridViewColumn
은 Visual
또는 Visual3D
이 아니기 때문에 불가능합니다.
아이디어가 있으십니까? 고맙습니다.
그래서, 거기 :
그런 다음 당신은 단순히 당신의
PropertyChangedCallback
에GridViewColumnHeader
에Header
속성을 시전 할 수있을 것입니다 : 당신이 요소 구문을 사용하도록 전환 할 경우이 작업을 수행 할 수 사실 열 머리글에 대한 속성 구문을 사용할 때 내재 된 GridViewColumnHeader가 없습니다 (2 열과 같이)? – Nostromo
문제는 특성 구문을 사용할 때 Header 속성이 IsColumnVisible 속성보다 * 앞에 설정되어 있기 때문에 Header 속성이 콜백에서 Nothing을 반환하는 이유입니다. – mm8
나는이 애플릿을 사용할 때마다 요소 구문을 사용하는 것을 잊지 않고 나 자신을 기억하는 것보다 기억하고 싶기 때문에 ... 어떻게 또는 어디에 올릴 지에 대한 제안이 있습니까? 내 속성이 헤더 앞에 설정된 경우 예외가 있습니까? – Nostromo