2014-10-08 2 views
1

작은 배경을 먼저 지정하십시오. 텍스트 파일에 정의 된 기존 UI 컨트롤이 있으며 동일한 텍스트 파일을 구문 분석하여 xaml을 만듭니다.WPF GridViewColumnHeader 고정 폭

컨트롤 중 하나는 WPF ListView과 비슷하며 텍스트 파일에는 자체 속성이있는 열의 모음을 저장할 수 있습니다. 이러한 속성 중 하나는 열이 WPF가 자동으로 제공하지 않는 고정 너비를 갖는지 여부를 나타냅니다.

이 그림은, 그래서 여기에 천 단어를 구사 네 개의 열이있는 ListView에를 포함하는 구문 분석 파일의 예입니다 : 단순함을 위해서 내가 데모 용 색소를 사용한

Basic layout

. 빨간색 텍스트가있는 첫 번째 열은 고정 너비가있는 열입니다.

이것을 달성하기 위해, 파싱하는 동안, 각각의 GridViewColumnHeader 자체가 그 열에 대한 특성에 포함되는 플래그 (즉 "IsFixed 등록")에 따라 수정 될 수 스타일를 수신한다. 열 너비를 해결하기 위해

, 나는 의 minWidth과 스타일 최대 너비 setter를 추가하는 스타일을 만들었습니다. ColumnResize은 사용자 지정 열거 형입니다.

private void _ModifyColumnResize(ref Style style, ColumnResize columnResize, int width) 
{ 
    if (columnResize == ColumnResize.IsFixed) 
    { 
     var minWidth = new Setter(MinWidthProperty, (double)width); 
     var maxWidth = new Setter(MaxWidthProperty, (double)width); 
     var fixedColor = new Setter(ForegroundProperty, Brushes.Red); 

     style.Setters.Add(minWidth); 
     style.Setters.Add(maxWidth); 
     style.Setters.Add(fixedColor); 
    } 
} 

이 모두 자동으로 (다른 세 열 등)의 내용의 그것과 폭을 변경하지 않습니다 열 그립에 잘, 더블 클릭을 작동하는 것 같다. 문제는 내가 그리퍼를 클릭하면 다음 다음 내가 볼 크기를 조정하려고 할 것입니다이 :

After resizing

당신이 볼 수 있듯이, 열 자체가 동일한 폭을 가지고 있지만, 컬럼의 왼쪽과 오른쪽에 , 띄어쓰기가 나타나지 않는다.

제 질문은 스타일을 통해이 동작을 중지 할 수 있습니까? 이상적으로 그리퍼가 크기 조정을 허용하지 않는 열에 표시되는 것을 원하지 않지만 스타일이 (구문 분석 중에) 코드 숨김으로 만들어지며이를 수행하는 방법을 확신 할 수 없습니다. xaml.

시간 내 주셔서 감사합니다.

내가 MSDN에서 GridViewColumnHeader에 대한 기본 서식 파일의 사본을 잡고 부분 PART_HeaderGripper을 제거 : 여기 @DareToExplore하는 감사와

+0

당신은 '이상적으로 크기 조정을 허용하지 않는 칼럼에 그리퍼를 표시하고 싶지 않습니다.'라고 말했습니까? 사용자가 앱의 항목 헤더에서 수행 할 수있는 작업을 알고 싶습니까? – DareToExplore

+0

안녕하세요, 그들은 정렬하고 문제가되는 것으로 볼 수없는 열 레이아웃 (드래그 앤 드롭)을 재 할당 할 수 있어야합니다. 문제는 - 당장은 오래된 통제에서 칼럼이 고정 된 너비를 가졌다 고 말할 수있었습니다. 고맙습니다. – user3235445

+0

[this] (http://stackoverflow.com/questions/181956/prevent-user-from-resizing-columns-with-wpf-listview)를 확인 했습니까? 귀하의 시나리오에 따라, 당신은 열 머리글 컨트롤 템플릿을 수정해야한다고 생각합니다. 사용자가 다른 것들 (정렬/드래그/드롭)에 대한 헤더와 상호 작용할 것이므로 헤더를 비활성화 할 수 없습니다. – DareToExplore

답변

0

는 솔루션입니다. 이 스타일은 이 아니며 모든 열의 기본값으로이 아니며 크기를 조정할 수없는 열에만 사용됩니다.

텍스트 파일을 구문 분석하는 동안 크기가 조정될 수있는 모든 열의 경우 기본 동작이므로 아무 것도 발생하지 않습니다.비 크기 조정 컬럼에 대한

, 내가 App.xaml의 스타일 리소스를 잡아, 다음과 같이 그 GridViewColumnHeaderHeaderContainerStyle 속성에 그 스타일을 할당 :

if (parsedColumn.ColumnResize == ColumnResize.IsFixed) 
{ 
    var style = this.FindResource("GridViewColumnHeader_NoResize"); 
    gridViewColumn.HeaderContainerStyle = style as Style; 
} 

들어 이제 스타일을 App.xaml으로두고 필요한 경우 잡아 드리겠습니다.

나는 이것이 충분히 자세하고 누군가 길을가는 데 도움이되기를 바랍니다.

다시 한번 감사드립니다. @DareToExplore!

+0

내가 도울 수있어서 기쁩니다. 이 질문에 답할 수 있습니다. – DareToExplore

+0

명백하게, 나는 이것을 받아 들일 내일까지 기다릴 필요가있다. 그래서 나는 하루를 기다릴 것이다! 네가이 일에 대한 신뢰를 얻길 바래, 다시 한번 너에게 감사 해. – user3235445

+0

확인. 신용 - 음, '고마워'는 나를위한 신용이다. stackflow 포인트 크레딧의 관점에서, 나는 어떤 포인트가 적립 될 것이라고 생각하지 않습니다. 나는 당신이 받아 들일 수있는 대답을 게시하지 않았기 때문입니다. 방금 너를 인도 했어. 나는 당신이 의견에 의해 투표를 할 수 있고 그것이 뭔가를 추가 할 수 있다면 확실하지 않습니다. – DareToExplore