gpt4 book ai didi

c# - 无法读取 Datagrid WPF 中嵌套的自定义列表框值

转载 作者:行者123 更新时间:2023-11-30 12:47:57 26 4
gpt4 key购买 nike

我已经为列表框定制了我的 ListBoxItem,它嵌套在数据网格中。但是,当我尝试遍历数据网格以查找列表框的控件时,当我尝试获取正在选择的单选按钮的值时它失败了。

任何人请就可能有帮助的任何方法或一些解决方案提出建议?非常感谢。

<Page.Resources>
<Style x:Key="RadioButtonItemStyle" TargetType="{x:Type ListBoxItem}">
<Setter Property="Margin" Value="0,0,5,0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border BorderThickness="0" Background="Transparent">
<!-- Note: IsChecked is bound to IsSelected-->
<RadioButton
Focusable="False"
IsHitTestVisible="False"
IsChecked="{TemplateBinding IsSelected}">
<ContentPresenter />
</RadioButton>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ItemsPanelTemplate x:Key="HorizontalItemsPanel">
<VirtualizingStackPanel
Orientation="Horizontal" />
</ItemsPanelTemplate>
</Page.Resources>
<Grid>
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Name="GroupQuestionHeader" FontSize="14" FontWeight="Bold" FontFamily="Times New Roman" />
<Label Name="PageCount" FontSize="10" FontFamily="Times New Roman"></Label>
</StackPanel>

<DataGrid AutoGenerateColumns="False" HorizontalAlignment="Left" Name="dataGrid1" VerticalAlignment="Top" CanUserReorderColumns="False" CanUserSortColumns="False" CanUserResizeColumns="False" CanUserAddRows="False">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Padding" Value="5" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" Value="Transparent" />
<Setter Property="Foreground" Value="Black" />
<Setter Property="BorderBrush" Value="{x:Null}" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Question" Width="400">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock TextWrapping="Wrap" Text="{Binding QuestionContent, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="We fully Comply | We partly Comply | We do not Comply" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ListBox
BorderThickness="0"
SelectedValue="{Binding MyDataListSelectedValue}"
ItemContainerStyle="{StaticResource RadioButtonItemStyle}"
ItemsPanel="{StaticResource HorizontalItemsPanel}" Name="OptionsRadioButtonGroup" HorizontalContentAlignment="Left"
Cursor="Hand" HorizontalAlignment="Left">
<ListBoxItem Width="90"/>
<ListBoxItem Width="90"/>
<ListBoxItem/>
</ListBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Button Content="Next Page" Height="23" HorizontalAlignment="Right" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</StackPanel>
</Grid>

我用的方法

for (int i=0;i<dataGrid1.Items.Count;i++) 
{
DataRowView datarowv = (DataRowView)dataGrid1.Items[i];
DataRow dr = datarowv.Row;
string RBValue = dr.ItemArray[1].toString();
}

最佳答案

这个怎么样。我还没有编译代码,我只是直接从脑子里写出来的。抱歉,如果您遇到编译错误。只需修复它们即可。

for (int i=0;i<dataGrid1.Items.Count;i++) 
{

// get control which represents the data
var control = dataGrid1.ItemContainerGenerator.ContainerFromItem(dataGrid1.Items[i]);
DependencyObject obj = control

// inside that control there is somewhere the ListBox so run down the visualtree till you find the damn ListBox
for(;!(obj is ListBox);
obj = VisualTreeHelper.GetChild(obj, 0));

ListBox listBox = obj as ListBox;
if(listBox != null)
{
// get the selected values from ListBox
var selectedItems = listBox.SelectedItems;
foreach(var selectedItem in selecteditems)
{
Console.WriteLine("I am a selected item: " + selectedItem.ToString());
}
}
}

如果您不明白这段小代码的作用,请直接提问。

关于c# - 无法读取 Datagrid WPF 中嵌套的自定义列表框值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com