我有一个listView,每个列都有一个gridview演示文稿和TextBlocks。我想通过在用户单击编辑按钮时用TextBoxes和ComboBox替换文本块来使所选行可编辑。我尝试通过设置切换控件可见性的样式来做到这一点:
<Style x:Name="ItemDisplayStyle" TargetType="{x:Type TextBlock}" x:Key="ItemDisplayStyle">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Visibility" Value="{Binding Path=dislayMode}" />
</Style>
<Style x:Name="ItemEditStyle" TargetType="{x:Type FrameworkElement}" x:Key="ItemEditStyle">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Visibility" Value="{Binding Path=editMode}" />
</Style>
displayMode和editMode是代码隐藏中设置的Visibility属性。 并且在xaml中更低:
<GridViewColumn Header="Date de début" Width="80">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Margin="-6,0"
HorizontalAlignment="Stretch" TextAlignment="Center"
Text="{Binding Path=DateDebut, Mode=TwoWay}"
Style="{StaticResource ItemDisplayStyle}" />
<TextBox x:Name="tbDateDebut" Margin="-6,0"
HorizontalAlignment="Stretch" HorizontalContentAlignment="Center"
Text="{Binding Path=DateDebut, Mode=TwoWay}"
Style="{StaticResource ItemEditStyle}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我的问题是在UI级别似乎没有检测到代码隐藏中的'editMode'和'displayMode'。
此外,即使我让它工作,我也不知道如何只将它应用于选定的行。 我可以通过将可见性值与ListView绑定来单独执行此操作,以便当用户选择一行时,她/他获得该行上的可编辑控件,但我真的只想在他们单击按钮时允许这样做。
答案 0 :(得分:0)
您是否在进行更改后刷新了网格的内容? 您可以使用Grid.GetColumn方法并发送发送方对象,即编辑按钮(我认为每个列都是独立的)然后可能使用VisualTreeHelper来获取该列中的文本框和组合框。
希望这有帮助。
另外,为什么不使用TextBox的'IsReadOnly'属性而不是替换TextBlock?根据您的要求使其成为真或假。