2010-09-28 208 views
0

你好 首先對不起我的英文。 我最近開始使用wpf的第一個項目。我正在設計一個自定義的DataGrid,它是以編程方式定義的(xaml代碼不存在)。 我已經在我的datagrid控件中除了一個複選框,我包裹在裏面的所有樣式。 問題是,在我的應用程序的其他地方,我定義了一個複選框樣式如何正確應用,但我不能應用在我的數據網格中。 其實我的datagrid不會拋出語法錯誤,但當datagrid運行復選框樣式不適用。 樣式代碼如下所示(它在樣式表中定義)Datagrid複選框樣式

... <Setter Property="DataGridCheckBoxColumn.ElementStyle"> 
     <Setter.Value> 
      <Style TargetType="{x:Type CheckBox}"> 

       <Setter Property="Background" Value="Yellow"/> 
       <Setter Property="BorderBrush" Value="{DynamicResource NormalBorderBrush}"/> 
       <Setter Property="Template"> 
        <Setter.Value> 
         <ControlTemplate TargetType="{x:Type CheckBox}"> 


          <BulletDecorator Background="Transparent"> 
           <BulletDecorator.Bullet> 
            <Grid Width="13" Height="13"> 
             <Border x:Name="Border" Background="Pink" BorderBrush="Black" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/> 
             <Path x:Name="CheckMark" Stroke="Green" StrokeThickness="2" SnapsToDevicePixels="False" Data="M1.5000001,1.5833334 L9.7920001,9.6666667 M1.5420001,9.6666667 L9.7083333,1.5000001" Margin="1" ClipToBounds="False" StrokeEndLineCap="Round" StrokeStartLineCap="Round"/> 
            </Grid> 
           </BulletDecorator.Bullet> 
           <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/> 
          </BulletDecorator> 

         </ControlTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Setter.Value> 

    </Setter>... 

它完全一樣的是它`在apliccation應用。 我讀了很多關於它,但我不能應用它,我也嘗試過,將setter屬性設置爲「DatagridBoundColum.ElementStyle」,也設置爲「CellStyle」,但它不起作用。 任何建議? 非常感謝。

回答

-1

不喜歡它,你會在XAML做:

<UserControl.Resources> 
    <DataTemplate x:Key="CheckBoxTemplate"> 
     <CheckBox Style="{StaticResource AnyResourceKeyInApplciation}"/> 
    </DataTemplate> 
</UserControl.Resources> 
<DataGrid x:Name="dataGrid" /> 
this.dataGrid.Columns.Add(new DataGridTemplateColumn 
           { 
            CellTemplate = this.Resources["CheckBoxTemplate"] as DataTemplate 
           } 
         ); 
-1

感謝您的回覆vorrtex。

我沒有準確地應用它,但它幫助我找到解決方案,但是我希望不要修改VB代碼並只修改它的xaml樣式標記。

我發現一個對象是如何簡化這個任務。它的語法如下:

column2.ElementStyle = Application.Current.FindResource("CheckBoxStyle") 

它在datagrid中應用樣式ok。但實際上它放置在單元的左邊界。我會試着找出原因。

再次感謝。

-1

你可以試試這個

<Controls:DataGridCheckBoxColumn Header="Homme" Binding="{Binding Homme}"> 
         <Controls:DataGridCheckBoxColumn.ElementStyle> 
          <Style TargetType="CheckBox" BasedOn="{StaticResource {x:Type CheckBox}}"> 
           <Setter Property="Margin" Value="4,0,0,0"/> 
          </Style> 
         </Controls:DataGridCheckBoxColumn.ElementStyle> 
        </Controls:DataGridCheckBoxColumn>