代码之家  ›  专栏  ›  技术社区  ›  Oleg

WPF工具包。将datagrid列头绑定到dynamicsource

  •  6
  • Oleg  · 技术社区  · 16 年前

    我正在尝试使用以下代码将datacolumn头绑定到dynamicsource。

    <Window.Resources>
        <sys:String x:Key="HeaderText">Header Text</sys:String>
    </Window.Resources>
    <Grid>
        <tk:DataGrid>
            <tk:DataGrid.Columns>
                <tk:DataGridTextColumn Header="{DynamicResource HeaderText}" Width="100"/>
            </tk:DataGrid.Columns>
        </tk:DataGrid>
    </Grid>
    

    但出于某种奇怪的原因,列标题仍然是空的。但是staticresource工作得很好。 你能帮我弄清楚如何将头属性绑定到某个dynamicsource吗?

    4 回复  |  直到 10 年前
        1
  •  8
  •   vanja.    16 年前

    试试这个:

    <Window.Resources>
        <sys:String x:Key="HeaderText">Header Text</sys:String>
        <Style x:Key="HeaderTextStyle" TargetType="{x:Type Primitives:DataGridColumnHeader}">
           <Setter Property="Content" Value="{DynamicResource HeaderText}" />
        </Style>
    </Window.Resources>
    <Grid>
        <tk:DataGrid>
            <tk:DataGrid.Columns>
                <tk:DataGridTextColumn HeaderStyle="{StaticResource HeaderTextStyle}" Width="100"/>
            </tk:DataGrid.Columns>
        </tk:DataGrid>
    </Grid>
    

    wpf toolkit的datagrid具有不是可视控件的datagridcolumns,因此它们有一些有趣的规则。其中一个有趣的规则是,只有绑定属性可以是绑定-其他所有内容都必须是静态的。为了避免这种情况,可以创建包含动态内容的静态样式资源。

        2
  •  4
  •   user2618214    10 年前

    这对我使用字典进行国际化很有用

    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{x:Null}" Width="120">
                <DataGridTextColumn.Header>
                    <TextBlock Text="{DynamicResource gridColumnHeader1}" />
                </DataGridTextColumn.Header>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>
    
        3
  •  1
  •   Morris    15 年前

    如果你只是想改变标题,不想打扰样式,做这个。(图片来源于海报上方)

        <Window.Resources>
        <sys:String x:Key="HeaderText">Header Text</sys:String>
        <TextBlock x:Key="HeaderSR" Text="{DynamicResource HeaderText}"/>
    </Window.Resources>
    <Grid>
        <tk:DataGrid>
            <tk:DataGrid.Columns>
                <tk:DataGridTextColumn Header="{StaticResource HeaderSR}" Width="100"/>
            </tk:DataGrid.Columns>
        </tk:DataGrid>
    </Grid>
    
        4
  •  1
  •   Chukiat    12 年前

    试试这个…

    <DataGrid>
       <DataGrid.Columns>
           <DataGridTextColumn    Binding="{Binding InputDate,Mode=OneWay,StringFormat='{}{0:dd MMM yy}'}" Width="70" >
              <DataGridTextColumn.Header>
                  <TextBlock Text="{DynamicResource ResourceKey=inputDate}" />
               </DataGridTextColumn.Header>
            </DataGridTextColumn>
        </DataGrid.Columns>
    </DataGrid>