小编Ole*_*leg的帖子

WPF TextBox和Scroll行为

我有个问题.我需要在ScrollViewer中托管带有控件的网格,以防止文本框在UI处被截断或折叠为零.另外,当用户更改窗口宽度时,我希望扩展文本框的内容.我将Window的内容设置为以下代码

<DockPanel>
    <TreeView DockPanel.Dock="Left" Width="150"/>
    <ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock Text="Name" 
                       Margin="5" 
                       VerticalAlignment="Center"/>
            <TextBox Grid.Column="1"
                     Text="Some Name"
                     Margin="5"
                     VerticalAlignment="Center"
                     MinWidth="200"/>
        </Grid>
    </ScrollViewer>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当用户在TextBox中键入非常长的文本时,它将被展开并显示水平滚动.是否有任何简单的方法来限制TextBox的最大宽度,并允许仅在用户更改窗口大小时才展开它.

wpf controls panels

11
推荐指数
1
解决办法
2万
查看次数

INotifyPropertyChanged问题

首先,我想说下面的示例过于简单化了.假设你绑定了WPF控件.

<Window Title="Window1" Height="300" Width="300">
<Grid>
    <StackPanel>
        <TextBox Text="{Binding Name}" Margin="10"/>
        <Button HorizontalAlignment="Center" 
        Content="Click Me" Margin="5" 
        Padding="2" Click="OnButtonClick" />
    </StackPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

Window绑定到Person类,该类实现INotifyPropertyChanged并在表单中具有Name setter

    public string Name 
    {
        get { return _name; }
        set 
        {
            _name = "Some Name";
            OnPropertyChanged("Name");
        }
    }
Run Code Online (Sandbox Code Playgroud)

即只要用户尝试从UI更改它,就会为其分配"某些名称".但这个样本不起作用.我将TextBox中的名称更改为某个值按Tab键,强制焦点移动到Button,TextBox中的值保持不变,尽管触发了PropertyChanged事件.

你能解释一下为什么会这样吗?据我所知,PropertyChanged事件强制UI重新读取属性中的值并显示它们,但在我的示例中,数据绑定文本框中的值不会更新.


再次.我知道这是财产的不良实施,但我想重申,这是过于简单化.这只是一个样本.但无论如何,PropertyChanged表示属性已更改,应该更新,但事实并非如此.

data-binding wpf inotifypropertychanged

7
推荐指数
1
解决办法
3553
查看次数

Wpf工具包.将DataGrid列标题绑定到DynamicResource

我正在尝试使用以下代码将DataColumn Header绑定到DynamicResource.

<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>
Run Code Online (Sandbox Code Playgroud)

但由于一些奇怪的原因,列标题仍为空.然而,StaticResource效果很好.你能帮我弄清楚如何将Header属性绑定到某些DynamicResource.

wpf datagrid wpftoolkit dynamicresource

6
推荐指数
2
解决办法
2万
查看次数