Quik Bytes
Quik Bytes

Reputation: 29

How to bind datagrid column ActualWidth to textbox MaxLength?

I am doing custom datagrid Headers, in header I have a textbox. Problem is that I can't determine textbox width relative to column width. I have tried to bind by element name and it works, but I can't get columnWidth. I have tried to bind

public static readonly DependencyProperty ColumnWidthProperty;

but that doesn't work.

<Page.DataContext>
    <PDB:UsersViewModel x:Name="vm"/>
</Page.DataContext>

    <!--Datagrid content-->
    <DataGrid x:Name="myGrd" 
              SelectionMode="Single"    
              SelectionUnit="Cell"
              CurrentItem="{Binding SelectedUser, Mode=TwoWay}"
              CurrentColumn="{Binding CurrentColumn, Mode=TwoWay}"
              IsReadOnly="True"
              Grid.Row="1" 
              ItemsSource="{Binding FilteredUserList}" 
              AutoGenerateColumns="True"             
              CanUserAddRows="False"
              >
        <DataGrid.Resources>
            <!--Popup-->
            <ContextMenu x:Key="ContextMenu">
                <ContextMenu.Items>
                    <MenuItem Header="Filter by Selection" Command="{Binding IncludeCommand, Source={x:Reference vm}}"/>
                    <MenuItem Header="Filter exclude Selection" Command="{Binding ExcludeCommand, Source={x:Reference vm}}"/>
                    <MenuItem Header="Remove all Filters" Command="{Binding RemoveAllFiltersCommand, Source={x:Reference vm}}" Visibility="{Binding Filters.Count, Source={x:Reference vm}, Converter={Wpf:VisibilityConverter}}"/>
                </ContextMenu.Items>
            </ContextMenu>
            <!--Custom Datagrid header View-->
            <Style TargetType="DataGridColumnHeader" x:Name="FilterHeader">
                <Setter Property="ContentTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <StackPanel HorizontalAlignment="Center" Orientation="Vertical">
                                <TextBox Width="{Binding ElementName=myGrd Path=ColumnWidth}" Margin="2" HorizontalAlignment="Center" />
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="{Binding}" HorizontalAlignment="Center"/>
                                    <Button Content="[-F-]" />
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </DataGrid.Resources>

        <DataGrid.CellStyle>
            <Style TargetType="DataGridCell">
                <Setter Property="ContextMenu" Value="{StaticResource ContextMenu}"/>
            </Style>
        </DataGrid.CellStyle>
    </DataGrid>
</Grid>
</Page>

Upvotes: 0

Views: 190

Answers (1)

Byoung Sam Moon
Byoung Sam Moon

Reputation: 306

<DataTemplate>
    <StackPanel HorizontalAlignment="Center" Orientation="Vertical">
            <TextBox Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridColumnHeader}}, Path=Width}"  
                    Margin="2" HorizontalAlignment="Center" />
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding}" HorizontalAlignment="Center"/>
            <Button Content="[-F-]" />
        </StackPanel>
    </StackPanel>
</DataTemplate>

Upvotes: 1

Related Questions