C# 有没有办法在StackPanel内部操纵网格

C# 有没有办法在StackPanel内部操纵网格,c#,wpf,C#,Wpf,我想创建ListBox,它里面应该包含一些元素。 我的代码: 在这种情况下,我不能把我的表格放进列表框,并在上面工作(例如,我希望有机会将其转换为star) 我已经试过: <Grid Name="star1" MouseDown="close" Height="50" Width="50" RenderTransformOrigin="0.5,0" Grid.Column="0" Margin="20,0,0,0"> <

我想创建ListBox,它里面应该包含一些元素。 我的代码:


在这种情况下,我不能把我的表格放进列表框,并在上面工作(例如,我希望有机会将其转换为star) 我已经试过:

<Grid Name="star1" MouseDown="close" Height="50" Width="50" RenderTransformOrigin="0.5,0" Grid.Column="0" Margin="20,0,0,0">
                            <DataGrid VerticalAlignment="Top" AutoGenerateColumns="False" ItemsSource="{Binding ElementName=listBox, Path=SelectedItem}"/>
                        </Grid>

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="800" Width="800" Background="#FF143761">

    <Grid Width="600" Margin="114,126,78,335">
        <ListBox Name="listBoxQuestion" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding ITEMS}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                                <ContentPresenter/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Width="{Binding WIDTH}">                        
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>                        
                        <StackPanel Grid.Row="0" Orientation="Horizontal">
                            <Label Name="id"       
                            Content="{Binding SURVEY_ID}"       
                            Grid.Row="0" 
                            Grid.Column="0"/>
                            <Label Name="question" 
                            Content="{Binding SURVEY_QUESTION}" 
                            Grid.Row="0" 
                            Grid.Column="1" VerticalAlignment="Stretch" />
                        </StackPanel>                        
                        <StackPanel Grid.Row="2" Orientation="Horizontal">
                            <Polygon Name="star1" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star2" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star3" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star4" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star5" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                        </StackPanel>                        
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

代码:

使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用系统图;
使用System.Collections.ObjectModel;
使用System.Text.RegularExpressions;
命名空间WpfApplication1
{
公共类项目
{
公共单位宽度;
公共单位星宽;
公共单位星高;
公共字符串id;
公共字符串问题;
公共收集点;
公共色刷填充色;
公共SolidColorBrush strokeColor;
公共水平对齐水平对齐;
公共垂直对齐垂直对齐;
公共单位宽度
{
获取{返回宽度;}
设置{width=value;}
}
公共单位星形宽度
{
获取{return starWidth;}
设置{starWidth=value;}
}
公共单位星高
{
获取{return starHeight;}
设置{starHeight=value;}
}
公共字符串调查ID
{
获取{return id;}
设置{id=value;}
}
公共字符串调查问题
{
获取{返回问题;}
设置{question=value;}
}
公共收集站
{
获取{返回点;}
设置{points=value;}
}
公共SolidColorBrush填充颜色
{
获取{return fillColor;}
设置{fillColor=value;}
}
公共SolidColorBrush STROKE_颜色
{
获取{return strokeColor;}
设置{strokeColor=value;}
}
公共水平线形H_线形
{
获取{返回水平对齐;}
设置{horizontalAlignment=value;}
}
公共垂直线形V_线形
{
获取{return verticalAlignment;}
设置{verticalAlignment=value;}
}
}
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
listBoxQuestion.ItemsSource=createItems();
}
私有列表createItems()
{
列表项=新列表();
添加(createItem(“1)”,“问题1”);
添加(createItem(“2)”,“问题2”);
添加(createItem(“3)”,“问题3”);
退货项目;
}
私有项createItem(字符串id,字符串问题)
{
项目=新项目();
项目宽度=800;
项目.星高=50;
项目宽度=50;
item.horizontalAlignment=horizontalAlignment.Left;
项目垂直对齐=垂直对齐中心;
item.id=id;
item.question=问题;
item.points=getPoints();
item.fillColor=getFillColor(“透明”);
item.strokeColor=getStrokeColor(“绿色”);
退货项目;
}
私有点集合getPoints()
{
PointCollection myPointLeftCollection=新建PointCollection();
System.Drawing.PointF[]pts=新的System.Drawing.PointF[5];
双rx=24/2;
双ry=24/2;
双cx=0+rx;
双cy=0+ry;
//从顶部开始。
双θ=-Math.PI/2;
双dtheta=4*Math.PI/5;
对于(int i=0;i<5;i++)
{
pts[i]=新系统.Drawing.PointF(
(浮动)(cx+rx*数学Cos(θ)),
(float)(cy+ry*Math.Sin(θ));
θ+=dtheta;
}
System.Windows.Point Point1Feedback=新的System.Windows.Point(pts[0].X,pts[0].Y);
System.Windows.Point Point2Feedback=新的System.Windows.Point(16,8);
<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="800" Width="800" Background="#FF143761">

    <Grid Width="600" Margin="114,126,78,335">
        <ListBox Name="listBoxQuestion" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding ITEMS}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="IsSelected" Value="{Binding Content.IsSelected, Mode=TwoWay, RelativeSource={RelativeSource Self}}"/>
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                                <ContentPresenter/>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Width="{Binding WIDTH}">                        
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>                        
                        <StackPanel Grid.Row="0" Orientation="Horizontal">
                            <Label Name="id"       
                            Content="{Binding SURVEY_ID}"       
                            Grid.Row="0" 
                            Grid.Column="0"/>
                            <Label Name="question" 
                            Content="{Binding SURVEY_QUESTION}" 
                            Grid.Row="0" 
                            Grid.Column="1" VerticalAlignment="Stretch" />
                        </StackPanel>                        
                        <StackPanel Grid.Row="2" Orientation="Horizontal">
                            <Polygon Name="star1" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star2" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star3" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star4" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                            <Polygon Name="star5" Points="{Binding POINTS}" Fill="{Binding FILL_COLOR}" Stroke="{Binding STROKE_COLOR}" Width="{Binding STAR_WIDTH}" Height="{Binding STAR_HEIGHT}" HorizontalAlignment="{Binding H_Alignment}" VerticalAlignment="{Binding V_Alignment}" MouseDown="clicked"/>
                        </StackPanel>                        
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Drawing;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;

namespace WpfApplication1
{
    public class Item
    {
        public uint width;
        public uint starWidth;
        public uint starHeight;

        public string id;
        public string question;
        public PointCollection points;
        public SolidColorBrush fillColor;
        public SolidColorBrush strokeColor;
        public HorizontalAlignment horizontalAlignment;
        public VerticalAlignment verticalAlignment;

        public uint WIDTH
        {
            get { return width; }
            set { width = value; }
        }
        public uint STAR_WIDTH
        {
            get { return starWidth; }
            set { starWidth = value; }
        }
        public uint STAR_HEIGHT
        {
            get { return starHeight; }
            set { starHeight = value; }
        }
        public string SURVEY_ID
        {
            get { return id; }
            set { id = value; }
        }
        public string SURVEY_QUESTION
        {
            get { return question; }
            set { question = value; }
        }
        public PointCollection POINTS
        {
            get { return points; }
            set { points = value; }
        }
        public SolidColorBrush FILL_COLOR
        {
            get { return fillColor; }
            set { fillColor = value; }
        }
        public SolidColorBrush STROKE_COLOR
        {
            get { return strokeColor; }
            set { strokeColor = value; }
        }
        public HorizontalAlignment H_Alignment
        {
            get { return horizontalAlignment; }
            set { horizontalAlignment = value; }
        }
        public VerticalAlignment V_Alignment
        {
            get { return verticalAlignment; }
            set { verticalAlignment = value; }
        }
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            listBoxQuestion.ItemsSource = createItems();
        }

        private List<Item> createItems()
        {
            List<Item> items = new List<Item>();

            items.Add(createItem("1)", "Question 1"));
            items.Add(createItem("2)", "Question 2"));
            items.Add(createItem("3)", "Question 3"));

            return items;
        }
        private Item createItem(string id, string question)
        {
            Item item = new Item();

            item.width = 800;
            item.starHeight = 50;
            item.starWidth = 50;

            item.horizontalAlignment = HorizontalAlignment.Left;
            item.verticalAlignment = VerticalAlignment.Center;            

            item.id = id;
            item.question = question;
            item.points = getPoints();
            item.fillColor = getFillColor("Transparent");
            item.strokeColor = getStrokeColor("Green");

            return item;
        }

        private PointCollection getPoints()
        {
            PointCollection myPointLeftCollection = new PointCollection();
            System.Drawing.PointF[] pts = new System.Drawing.PointF[5];

            double rx = 24 / 2;
            double ry = 24 / 2;
            double cx = 0 + rx;
            double cy = 0 + ry;

            // Start at the top.
            double theta = -Math.PI / 2;
            double dtheta = 4 * Math.PI / 5;
            for (int i = 0; i < 5; i++)
            {
                pts[i] = new System.Drawing.PointF(
                    (float)(cx + rx * Math.Cos(theta)),
                    (float)(cy + ry * Math.Sin(theta)));
                theta += dtheta;
            }

            System.Windows.Point Point1Feedback = new System.Windows.Point(pts[0].X, pts[0].Y);
            System.Windows.Point Point2Feedback = new System.Windows.Point(16, 8);
            System.Windows.Point Point3Feedback = new System.Windows.Point(pts[3].X, pts[3].Y);
            System.Windows.Point Point4Feedback = new System.Windows.Point(18, 14);
            System.Windows.Point Point5Feedback = new System.Windows.Point(pts[1].X, pts[1].Y);
            System.Windows.Point Point6Feedback = new System.Windows.Point(12, 18);
            System.Windows.Point Point7Feedback = new System.Windows.Point(pts[4].X, pts[4].Y);
            System.Windows.Point Point8Feedback = new System.Windows.Point(6, 14);
            System.Windows.Point Point9Feedback = new System.Windows.Point(pts[2].X, pts[2].Y);
            System.Windows.Point Point10Feedback = new System.Windows.Point(9, 8);

            myPointLeftCollection.Add(Point1Feedback);
            myPointLeftCollection.Add(Point2Feedback);
            myPointLeftCollection.Add(Point3Feedback);
            myPointLeftCollection.Add(Point4Feedback);
            myPointLeftCollection.Add(Point5Feedback);
            myPointLeftCollection.Add(Point6Feedback);
            myPointLeftCollection.Add(Point7Feedback);
            myPointLeftCollection.Add(Point8Feedback);
            myPointLeftCollection.Add(Point9Feedback);
            myPointLeftCollection.Add(Point10Feedback);

            return myPointLeftCollection;
        }
        private SolidColorBrush getFillColor(string themeColorInner)
        {
            return (SolidColorBrush)new BrushConverter().ConvertFromString(themeColorInner);
        }
        private SolidColorBrush getStrokeColor(string themeColorBorder)
        {
            return (SolidColorBrush)new BrushConverter().ConvertFromString(themeColorBorder);
        }

        private void clicked(object sender, RoutedEventArgs e)
        {

        }
    }
}