2010-07-29 17 views
2

У меня возникла следующая проблема: я использую всплывающее окно сводной проверки для отображения ошибок на странице, и у меня есть редактируемый DataGrid. Таким образом, есть две проблемы:Как отключить нижний колонтитул Silverlight DataGrid?

1) Проверка данных DataGrid дублирует ошибку проверки, если она встречается в ячейке DataGrid. Например. DataGrid содержит набор объектов IEnumerable. Когда я делаю ComplexObject.Validate() для каждого объекта в коллекции, я получаю 1 ошибку проверки для каждого неправильного объекта в нижнем колонтитуле DataGrid и 2 одинаковых ошибки во всплывающем сводке сводки. Я пробовал с другим Datagrid (Telerik), и он работал нормально, поэтому я предполагаю, что это проблема DataGrid, хотя контроль Telerik мне не подходит.

2) Датчик проверки DataGrid является избыточным, и я хочу его удалить или скрыть.

Есть ли способ достичь обоих вариантов одновременно? Заранее спасибо.

ответ

3

Чтобы удалить сводку проверки достоверности данных (вопрос № 2), извлеките стиль, используя смесь или отражатель, вставьте его в ресурс стиля style и удалите контрольный элемент проверки достоверности.

Затем укажите стиль в объявлении datagrid (Style = {StaticResource DataGridOverrideStyle}). Вот XAML для Silverlight 4, если у вас нет отражателя или смесь:

<Style TargetType="local:DataGrid" x:Key="DataGridOverrideStyle"> 
    <Setter Property="RowBackground" Value="#AAEAEFF4" /> 
    <Setter Property="AlternatingRowBackground" Value="#00FFFFFF" /> 
    <Setter Property="Background" Value="#FFFFFFFF" /> 
    <Setter Property="HeadersVisibility" Value="Column" /> 
    <Setter Property="HorizontalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="VerticalScrollBarVisibility" Value="Auto" /> 
    <Setter Property="SelectionMode" Value="Extended" /> 
    <Setter Property="CanUserReorderColumns" Value="True" /> 
    <Setter Property="CanUserResizeColumns" Value="True" /> 
    <Setter Property="CanUserSortColumns" Value="True" /> 
    <Setter Property="AutoGenerateColumns" Value="True" /> 
    <Setter Property="RowDetailsVisibilityMode" Value="VisibleWhenSelected" /> 
    <Setter Property="BorderBrush"> 
     <Setter.Value> 
      <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
       <GradientStop Color="#FFA3AEB9" Offset="0"/> 
       <GradientStop Color="#FF8399A9" Offset="0.375"/> 
       <GradientStop Color="#FF718597" Offset="0.375"/> 
       <GradientStop Color="#FF617584" Offset="1"/> 
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="BorderThickness" Value="1" /> 
    <Setter Property="DragIndicatorStyle"> 
     <Setter.Value> 
      <!-- TODO: Change the TargetType to Control when the fix Jolt bugs 18719 is verified --> 
      <Style TargetType="ContentControl"> 
       <Setter Property="Foreground" Value="#7FFFFFFF" /> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <!-- TODO: Change the TargetType to Control when the fix Jolt bugs 18719 is verified --> 
         <ControlTemplate TargetType="ContentControl"> 
          <Grid> 
           <VisualStateManager.VisualStateGroups> 
            <VisualStateGroup x:Name="SortStates"> 
             <VisualState x:Name="Unsorted" /> 
             <VisualState x:Name="SortAscending"> 
              <Storyboard> 
               <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> 
              </Storyboard> 
             </VisualState> 
             <VisualState x:Name="SortDescending"> 
              <Storyboard> 
               <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="Opacity" Duration="0" To="1.0"/> 
               <DoubleAnimation Storyboard.TargetName="SortIcon" Storyboard.TargetProperty="(RenderTransform).ScaleY" Duration="0" To="-.9"/> 
              </Storyboard> 
             </VisualState> 
            </VisualStateGroup> 
           </VisualStateManager.VisualStateGroups> 

           <Rectangle x:Name="BackgroundRectangle" Stretch="Fill" Fill="#66808080" Grid.ColumnSpan="2" /> 

           <Rectangle x:Name="BackgroundGradient" Stretch="Fill" Grid.ColumnSpan="2" Opacity="0" > 
            <Rectangle.Fill> 
             <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
              <GradientStop Color="#FFFFFFFF" Offset="0.015" /> 
              <GradientStop Color="#F9FFFFFF" Offset="0.375" /> 
              <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
              <GradientStop Color="#C6FFFFFF" Offset="1" /> 
             </LinearGradientBrush> 
            </Rectangle.Fill> 
           </Rectangle> 

           <Grid HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}"> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition/> 
             <ColumnDefinition Width="Auto" /> 
            </Grid.ColumnDefinitions> 

            <ContentPresenter Content="{TemplateBinding Content}"/> 

            <Path Grid.Column="1" Name="SortIcon" Fill="#7FFFFFFF" RenderTransformOrigin=".5,.5" HorizontalAlignment="Left" VerticalAlignment="Center" Opacity="0" Stretch="Uniform" Width="8" Margin="4,0,0,0" Data="F1 M -5.215,6.099L 5.215,6.099L 0,0L -5.215,6.099 Z "> 
             <Path.RenderTransform> 
              <ScaleTransform ScaleX=".9" ScaleY=".9" /> 
             </Path.RenderTransform> 
            </Path> 
           </Grid> 
          </Grid> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="DropLocationIndicatorStyle"> 
     <Setter.Value> 
      <Style TargetType="ContentControl"> 
       <Setter Property="Background" Value="#FF3F4346"/> 
       <Setter Property="Width" Value="2"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="ContentControl"> 
          <Rectangle Fill="{TemplateBinding Background}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/> 
         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="GridLinesVisibility" Value="Vertical" /> 
    <Setter Property="HorizontalGridLinesBrush" Value="#FFC9CACA" /> 
    <Setter Property="IsTabStop" Value="True" /> 
    <Setter Property="VerticalGridLinesBrush" Value="#FFC9CACA" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="local:DataGrid"> 
       <Grid> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Normal"/> 
          <VisualState x:Name="Disabled"> 
           <Storyboard> 
            <DoubleAnimation Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="Opacity" Duration="0" To="1"/> 
           </Storyboard> 
          </VisualState> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
        <Border BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="2"> 
         <Grid Name="Root" Background="{TemplateBinding Background}"> 
          <Grid.Resources> 
           <!--Start: TopLeftHeaderTemplate--> 
           <ControlTemplate x:Key="TopLeftHeaderTemplate" TargetType="localprimitives:DataGridColumnHeader"> 
            <Grid Name="Root"> 
             <Grid.RowDefinitions> 
              <RowDefinition/> 
              <RowDefinition/> 
              <RowDefinition Height="Auto" /> 
             </Grid.RowDefinitions> 
             <Border BorderThickness="0,0,1,0" BorderBrush="#FFC9CACA" Background="#FF1F3B53" Grid.RowSpan="2"> 
              <Rectangle Stretch="Fill" StrokeThickness="1"> 
               <Rectangle.Fill> 
                <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
                 <GradientStop Color="#FCFFFFFF" Offset="0.015" /> 
                 <GradientStop Color="#F7FFFFFF" Offset="0.375" /> 
                 <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
                 <GradientStop Color="#D1FFFFFF" Offset="1" /> 
                </LinearGradientBrush> 
               </Rectangle.Fill> 
              </Rectangle> 
             </Border> 
             <Rectangle VerticalAlignment="Bottom" Width="Auto" StrokeThickness="1" Height="1" Fill="#FFDBDCDC" Grid.RowSpan="2"/> 
            </Grid> 
           </ControlTemplate> 
           <!--End: TopLeftHeaderTemplate--> 

           <!--Start: TopRightHeaderTemplate--> 
           <ControlTemplate x:Key="TopRightHeaderTemplate" TargetType="localprimitives:DataGridColumnHeader"> 
            <Grid Name="RootElement"> 
             <Grid.RowDefinitions> 
              <RowDefinition/> 
              <RowDefinition/> 
              <RowDefinition Height="Auto" /> 
             </Grid.RowDefinitions> 
             <Border BorderThickness="1,0,0,0" BorderBrush="#FFC9CACA" Background="#FF1F3B53" Grid.RowSpan="2"> 
              <Rectangle Stretch="Fill"> 
               <Rectangle.Fill> 
                <LinearGradientBrush StartPoint=".7,0" EndPoint=".7,1"> 
                 <GradientStop Color="#FCFFFFFF" Offset="0.015" /> 
                 <GradientStop Color="#F7FFFFFF" Offset="0.375" /> 
                 <GradientStop Color="#E5FFFFFF" Offset="0.6" /> 
                 <GradientStop Color="#D1FFFFFF" Offset="1" /> 
                </LinearGradientBrush> 
               </Rectangle.Fill> 
              </Rectangle> 
             </Border> 
            </Grid> 
           </ControlTemplate> 
           <!--End: TopRightHeaderTemplate--> 
          </Grid.Resources> 

          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto" /> 
           <RowDefinition/> 
           <RowDefinition Height="Auto" /> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto" /> 
           <ColumnDefinition/> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 

          <localprimitives:DataGridColumnHeader Name="TopLeftCornerHeader" Template="{StaticResource TopLeftHeaderTemplate}" Width="22" /> 
          <localprimitives:DataGridColumnHeadersPresenter Name="ColumnHeadersPresenter" Grid.Column="1"/> 
          <localprimitives:DataGridColumnHeader Name="TopRightCornerHeader" Grid.Column="2" Template="{StaticResource TopRightHeaderTemplate}" /> 
          <Rectangle Name="ColumnHeadersAndRowsSeparator" Grid.ColumnSpan="3" VerticalAlignment="Bottom" Width="Auto" StrokeThickness="1" Height="1" Fill="#FFC9CACA"/> 

          <localprimitives:DataGridRowsPresenter Name="RowsPresenter" Grid.ColumnSpan="2" Grid.Row="1" /> 
          <Rectangle Name="BottomRightCorner" Fill="#FFE9EEF4" Grid.Column="2" Grid.Row="2" /> 
          <Rectangle Name="BottomLeftCorner" Fill="#FFE9EEF4" Grid.Row="2" Grid.ColumnSpan="2" /> 
          <ScrollBar Name="VerticalScrollbar" Orientation="Vertical" Grid.Column="2" Grid.Row="1" Width="18" Margin="0,-1,-1,-1"/> 

          <Grid Grid.Column="1" Grid.Row="2"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition/> 
           </Grid.ColumnDefinitions> 
           <Rectangle Name="FrozenColumnScrollBarSpacer" /> 
           <ScrollBar Name="HorizontalScrollbar" Grid.Column="1" Orientation="Horizontal" Height="18" Margin="-1,0,-1,-1"/> 
          </Grid> 

          <!--<dataInput:ValidationSummary Name="ValidationSummary" Grid.Row="3" Grid.ColumnSpan="3" MaxHeight="0" />--> 
         </Grid> 
        </Border> 
        <Border x:Name="DisabledVisualElement" IsHitTestVisible="False" Height="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" CornerRadius="2" Background="#8CFFFFFF" Opacity="0"/> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
1

Другим решением является подклассом DataGrid и установите MaxHeight элемента управления ValidationSummary к нулю в OnApplyTemplate переопределения. Что-то вроде этого:

public class NoValidationSummaryDataGrid : DataGrid 
{ 
    public override void OnApplyTemplate() 
    { 
     base.OnApplyTemplate(); 
     var summaryCtrl = GetTemplateChild("ValidationSummary"); 
     ((ValidationSummary)summaryCtrl).MaxHeight = 0; 
    } 
} 
Смежные вопросы