2012-01-02 5 views
0

У меня проблема с компонентом DockPanel. Когда я изменяю размер панели, я не хочу, чтобы отображался горизонтальный ScrollBar, но вместо этого я хочу, чтобы левое содержимое было изменено и за счет потери какого-либо контента. То, что я хочу добиться на самом деле, состоит в том, что правильное содержание DockPanel всегда видно, избегая использования горизонтальной полосы прокрутки, чтобы показать его. Надеюсь, что я был чист! Это код: (это DataTemplate идет внутри ListView)DockPanel размер вопрос

<DataTemplate DataType="{x:Type src:Voce}" x:Name="templateVoce"> 
     <StackPanel Name="stackPanelVoce" MaxWidth="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ActualWidth}"> 
       <DockPanel> 
        <TextBlock Name="labelCodiceVoce" ToolTip="{Binding Path=Voce.Voce}" Text="{Binding Path=Voce.Id}" Width="40" /> 
        <TextBlock Name="labelDescrizioneVoce" ToolTip="{Binding Path=Voce.Voce}" Text="{Binding Path=Voce.Voce}" TextTrimming="CharacterEllipsis" Width="500" /> 
        <TextBlock Name="labelDescrizioneNature" ToolTip="{Binding Path=Voce.Voce}" Text="{Binding Path=ListaNature, Converter={StaticResource listaNatureConverter}}"/> 
        <Expander Name="expander1" Expanded="expander1_Expanded" Collapsed="expander1_Collapsed" DockPanel.Dock="Right" Width="25" /> 
        <TextBox Name="txtValoreVoce" PreviewKeyDown="txtValoreVoce_PreviewKeyDown" TabIndex="1" IsTabStop="False" GotFocus="txtValoreVoce_GotFocus" PreviewTextInput="txtValoreVoce_PreviewTextInput_1" AllowDrop="False" Loaded="txtValoreVoce_Loaded" IsEnabled="{Binding Path=DataContext.VMPadre.IsModifica, RelativeSource={RelativeSource FindAncestor, AncestorType=src:InserimentoVoci, AncestorLevel=1}}" DockPanel.Dock="Right" Width="70" HorizontalAlignment="Right"> 
         <TextBox.Style> 
          <Style> 
           <Setter Property="TextBox.Text" Value="{Binding Path=Valore, StringFormat=N0}" /> 
           <Style.Triggers> 
            <Trigger Property="TextBox.IsKeyboardFocusWithin" Value="True"> 
             <Setter Property="TextBox.Text" Value="{Binding Path=Valore, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" /> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </TextBox.Style> 
         <TextBox.InputBindings> 
          <!--Disable Paste--> 
          <KeyBinding Command="ApplicationCommands.NotACommand" 
         Key="V" 
         Modifiers="Control" /> 
         </TextBox.InputBindings> 
         <TextBox.ContextMenu> 
          <ContextMenu IsEnabled="False" Visibility="Hidden" /> 
         </TextBox.ContextMenu> 
        </TextBox> 
        <TextBlock Name="lblPiuMeno" Margin="0,-5,0,0" VerticalAlignment="Center" FontSize="16" HorizontalAlignment="Right" DockPanel.Dock="Right" /> 
        <Image Name="imgMulti" Source="/ClientConfidi;component/Immagini/112_Plus_Orange.ico" Margin="1" Visibility="Collapsed" ToolTip="La voce presenta nature opzionali" DockPanel.Dock="Right" HorizontalAlignment="Right" /> 
        <Image Name="imgWarning" Source="/ClientConfidi;component/Immagini/Annotate_Warning.ico" Margin="1" Visibility="Collapsed" DockPanel.Dock="Right" HorizontalAlignment="Right" /> 
       </DockPanel> 
       <ContentControl Name="controlExpander" IsEnabled="{Binding Path=DataContext.VMPadre.IsModifica, RelativeSource={RelativeSource FindAncestor, AncestorType=src:InserimentoVoci, AncestorLevel=1}}"/> 
     </StackPanel> 

до критической точки изменения размера: before the critical point of resizing После критической точки Resing:

after the critical point of resing Я хочу, чтобы текст Осроена обрезать, а не скрывать стрелку расширителя, которая должна быть всегда вправо. Спасибо!

ответ

0

Решено! трюк ставит ScrollViewer.HorizontalScrollBarVisibility="Disabled" в определении XAML списка просмотра

1

Возможно, вы должны использовать сетку вместо DockPanel. DockPanel - довольно быстрая сетка, и вы получаете гораздо больше свободы с помощью Grid.

Я бы использовал четыре колонки; auto, * auto и auto соответственно. Затем, чтобы колонны выстроились в ListView, добавьте свойство IsSharedSizeScope. http://msdn.microsoft.com/en-us/library/system.windows.controls.grid.issharedsizescope.aspx

Поскольку ширина второго столбца равна *, сетка будет изменять размер, вместо столбцов с шириной, установленной в auto. Вы также можете установить другие столбцы в заданный размер.

+0

это не работает ... может быть, я не знаю, где добавить свойство IsSharedSizeScope. изменение докпанели в сетке: «' –

+0

Grid.IsSharedSizeScope = "true" должен идти в элементе ListBox. И тогда вы должны будете назвать свои ColumnDefinitions, такие как AkselK

+0

Извините, но в эти дни я не мог попробовать ваш код до сегодняшнего дня. Я добавил SharedSizeScope в listview , но добавление SharedSizeGroup приведет к поведению, в котором изменение размера в горизонтальном представлении списка не будет изменяться вообще ... –

Смежные вопросы