2013-06-24 2 views
0

나는이 질문을하는 사람들이 꽤 많았으며 내 질문이 약간 다름을 느꼈다. 일련의 동일한 사용자 정의 만든 사용자 정의 컨트롤을 보유하는 목록 상자가 있습니다. 이러한 컨트롤은 런타임에 목록 상자에 추가됩니다. 이제 나는 현재 목록 상자 항목을 처음으로 만들고 컨트롤에 삽입 할 때 올바르게 크기를 조정합니다.목록 상자 크기가 바뀌면 목록 상자 내용이 동적으로 바뀌지 않음

이상한 부분이 있습니다. 목록 상자의 크기를 조정하면 이전에 표시되었던 컨트롤의 크기가 새 목록 상자 너비로 조정되지 않습니다. 다른 말로하면 12 개의 컨트롤을 추가하고 상자에 4 (나머지는 스크롤바에 의해 숨겨 짐) 만 표시되면 상자의 크기를 조정하면 처음 네 개의 컨트롤이 원래 너비가되고 스크롤하면 다른 8이 올바른 크기. 또한 어떤 식 으로든 목록 항목을 조작하면 자동으로 적절한 너비로 크기가 조절됩니다. 편집 EDIT2

sizeChanged 이벤트에 첨부하고 목록 상자와 항목 모두에서 다음을 실행하려고 시도했지만 효과가 없습니다. 목록 상자 항목에 대한 레이아웃 정보를 다시 설정하는 몇 가지 방법을 찾아야하지만 명령을 찾을 수 없다고 생각합니다.

item.InvalidateArrange(); 
item.InvalidateMeasure(); 
Layers.UpdateLayout(); 
item.UpdateLayout(); 

나는 이것이 내가이 lisbox에서 항목을 분리하더라도 때문에 추가 해요 항목으로 할 그리고 그들은 잘못된 폭 남아 첨부 할 수있는 뭔가가 생각합니다. 여기

내 목록 상자 코드 : 내 UserControl을 올바르게 자체는 그냥 확장 할 수처럼 여기
<ListBox x:Name="Layers" VerticalContentAlignment="Top" Margin="0,17,0,0" BorderThickness="0,1,0,0" HorizontalContentAlignment="Stretch" SizeChanged="Layers_SizeChanged"> 
         <ListBox.ItemContainerStyle> 
          <Style TargetType="ListBoxItem"> 
           <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
          </Style> 
         </ListBox.ItemContainerStyle> 
        </ListBox> 

내 항목에 대한 코드입니다

<UserControl x:Class="ListOverlayItem" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:data="clr-namespace:Data" 
HorizontalContentAlignment="Stretch"> 

<UserControl.Resources> 
    <data:Translator x:Key="translatorString" /> 
</UserControl.Resources> 

<Border BorderBrush="Silver" BorderThickness="0,0,0,0" Name="border1" HorizontalAlignment="Stretch"> 
    <Grid x:Name="layout" HorizontalAlignment="Stretch"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="19"/> 
      <RowDefinition Height="25" /> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="20" /> 
      <ColumnDefinition Width="*" /> 
      <ColumnDefinition Width="60" /> 
     </Grid.ColumnDefinitions> 
     <!-- Column 0 --> 
     <ScrollBar Name="arrangeIcon" FlowDirection="LeftToRight" Maximum="10" SmallChange="1" Value="5" Grid.Column="0" Grid.Row="0" Grid.RowSpan="2"/> 

     <!-- Column 1 --> 
     <Slider Name="OverlayOpacity" Height="25" Grid.Column="1" Margin="6,0,0,0" Grid.Row="1" Maximum="1" LargeChange="0.1" ValueChanged="OverlayOpacity_ValueChanged"/> 
     <TextBlock x:Name="OverlayName" Text="{Binding Path=LocationName}" Foreground="#FFF08D2D" Margin="10,2,0,0" Grid.Column="1" FontSize="12" Height="18" VerticalAlignment="Top" /> 

     <!-- Column 3 --> 
     <Button Name="SettingsButton" Grid.Column="3" Content="{Binding TRK_OV_Settings, Source={StaticResource translatorString}}" VerticalAlignment="Center" Click="SettingsButton_Click" /> 
     <CheckBox x:Name="OverlayEnabled" FlowDirection="LeftToRight" Grid.Column="2" DataContext="{Binding}" HorizontalAlignment="Right" VerticalAlignment="Center" Grid.RowSpan="2" Checked="OverlayEnabled_Checked" Unchecked="OverlayEnabled_Unchecked" /> 
     <TextBlock Name="percentage" Text="100%" FontSize="9" TextAlignment="Right" Grid.Column="2" Grid.Row="1" VerticalAlignment="Center" Margin="2,6,26,6" MinWidth="30"/> 
    </Grid> 
</Border> 

다시 보인다 상위 컨테이너가 크기가 조정될 때 명령을 수행하도록합니다.

EDIT : 잘못 추가되었으므로 WPF 태그가 삭제되었습니다. 나는 슬라이더를 범인으로 생각했습니다. 슬라이더를 'stretch'대신 고정 된 크기로 설정하면 항목의 크기가 올바르게 올바르게 조정됩니다. 그래서 질문은 어떻게 슬라이더를 강제로 크기를 조정할 수 있는가입니다.

EDIT2 : 나는이 문제의 원인을 알고 있지만 어떻게 해결해야할지 모르겠다. 무슨 일이 일어나고 내 사용자 정의 컨트롤에서 슬라이더는 크기 조정 도중 슬라이더의 값을 변경하지 않으면 컨트롤의 나머지 부분과 함께 크기가 조정되지 않습니다. 즉각적으로 i 값은 자동으로 크기가 조정되는 소수 부분까지 변경됩니다. 어떻게 크기를 조정할 수 있습니까?

+0

코드를 삭제하십시오. WPF는 그것을 필요로하지 않습니다. UserControl의 전체 XAML을 게시하십시오. Snoop을 사용하여 런타임시 시각적 트리를 검사하고 현재 상황을 확인하십시오. WPF는 해상도에 독립적이며 코드 숨김 해킹이 필요하지 않습니다. –

답변

0

나는 슬라이더가 문제를 일으키고 있다고 판단하고 필요한 경우 슬라이더를 다시 그리도록 강제하는 많은 방법을 시도했지만 성공하지 못했습니다. 내 마지막 해결책은 슬라이더를 완전히 제거하는 것이 었습니다. 이제 잘 작동합니다.

관련 문제