请教各位高手一个WPF用户控件的问题

r4 2014-03-06 10:39:42
我在VS2010下写了一个用户控件,内容主要是8个TextBox,并且将这个控件作为DataGrid的Cell,现在的问题是我使用
List<ganttLine> _data = new List<ganttLine>();
_data.Add(new ganttLine());
_data.Add(new ganttLine());
_dataX[0].percentage0 = 0.2f;
_dataX[0].percentage1 = 0.25f;
_dataX[0].percentage2 = 0.02f;
_dataX[0].percentage3 = 0.175f;
datagrid.Items.Add(_data);
的方式加入新的数据后,这些加入的值全部都是初始值,对他们的修改都是无效的,percentage0 ~percentage3 4个属性本来是用来设置其中4个TextBox的内容的,但是现在一点作用也没有,
这样的情况只出现在将这个控件作为DataGrid的Item的时候,如果我将控件直接放在窗口上就没问题,请问这是为什么啊?下面是XAML
<DataGrid x:Name="dgTimeline" AutoGenerateColumns="False" HorizontalAlignment="Stretch" CanUserAddRows="False" CanUserResizeColumns="False" IsReadOnly="True" VerticalAlignment="Stretch" SelectionUnit="Cell" Grid.Row="1">
<DataGrid.Columns>
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="186"/>
</Grid.ColumnDefinitions>
<Grid HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="1" />
<RowDefinition Height="24" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="48*"/>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="48*"/>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="48*"/>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="48*"/>
</Grid.ColumnDefinitions>
<ContentPresenter Content="年" x:Name="Year" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ColumnSpan="7" />
<Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Height="1" Grid.Row="1" Grid.ColumnSpan="7" />
<ContentPresenter Content="1季度" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="1" />
<ContentPresenter Content="2季度" Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="3" />
<ContentPresenter Content="3季度" Grid.Row="2" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="5" />
<ContentPresenter Content="4季度" Grid.Row="2" Grid.Column="6" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<local:ganttLine/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
另外还有一个问题就是我生成了一个复合表头,现在想在代码里动态修改表头的文字,应该怎么做的,我尝试获得表头的对象,但是没有成功。
...全文
219 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bonjour-你好 2014-03-08
  • 打赏
  • 举报
回复
引用 17 楼 r4 的回复:
非常感谢,进度条我自己再试试看吧,另外请问,我想在代码里手工设置<ContentPresenter Content="年" x:Name="Year" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ColumnSpan="7" /> 的Content的内容,就是那个“年”字,应该怎么做呢?
        private T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++) {
                var child = VisualTreeHelper.GetChild(parent, i);
                string controlName = child.GetValue(Control.NameProperty) as string;
                if (controlName == name) {
                    return child as T;
                } else {
                    T result = FindVisualChildByName<T>(child, name);
                    if (result != null)
                        return result;
                }
            }
            return null;
        }
调用:
            ContentPresenter temp = FindVisualChildByName<ContentPresenter>(this.dgTimeline, "Year");
            if (temp != null) {
                temp.Content = "自定义";
            }
r4 2014-03-08
  • 打赏
  • 举报
回复
非常感谢,进度条我自己再试试看吧,另外请问,我想在代码里手工设置<ContentPresenter Content="年" x:Name="Year" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ColumnSpan="7" /> 的Content的内容,就是那个“年”字,应该怎么做呢?
Bonjour-你好 2014-03-08
  • 打赏
  • 举报
回复
引用 13 楼 r4 的回复:
您能给我一个在DataGrid中使用用户控件的例子吗?我主要就是在这个问题上没搞清楚
很少有用用户控件当模板的例子,不过话说回来,确实可以直接不用用户控件,自定义那一列的内容就可以,明早起来做个小例子吧。
Bonjour-你好 2014-03-08
  • 打赏
  • 举报
回复
namespace MyTestWpf
{
public partial class MainWindow : Window
{
private ObservableCollection<CustomGanttLine> _data;

public MainWindow()
{
InitializeComponent();

_data = new ObservableCollection<CustomGanttLine> {
new CustomGanttLine{ Percentage0=0.2f, Percentage1=0.25f, Percentage2=0.02f, Percentage3=0.174f, Sum=245.0f}
};
this.dgTimeline.ItemsSource = _data;
}
}

public class CustomGanttLine
{
public Single Percentage0 { get; set; }
public Single Percentage1 { get; set; }
public Single Percentage2 { get; set; }
public Single Percentage3 { get; set; }
public Single Sum { get; set; }
}

public class CTUConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Single percentage;
if (Single.TryParse(value.ToString(), out percentage)) {
return (percentage * 100.0f).ToString() + "%";
}

return "";
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}

public class CTDConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Single percentage, sum;
if (Single.TryParse(values[0].ToString(), out percentage) && Single.TryParse(values[1].ToString(), out sum)) {
return (percentage * sum).ToString();
}

return "";
}

public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
}


PS:这里没有做那个像进度条的那个东西个。希望对你理解DataGrid用法及WPF学习有所帮助
Bonjour-你好 2014-03-08
  • 打赏
  • 举报
回复
<Window x:Class="MyTestWpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:local="clr-namespace:MyTestWpf"
        Title="MainWindow" Height="350" Width="525">

    <Window.Resources>
        <LinearGradientBrush x:Key="NormalBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFEDA25E" Offset="0"/>
            <GradientStop Color="#FFEDA25E" Offset="0.5"/>
            <GradientStop Color="#FFFA7A05" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="EndPointBrush" EndPoint="0.5,1" StartPoint="0.5,0.0">
            <GradientStop Color="#FF3EB1EA" Offset="0"/>
            <GradientStop Color="#FF61BFF1" Offset="0.5"/>
            <GradientStop Color="#FF01A1F4" Offset="1"/>
        </LinearGradientBrush>

        <Style TargetType="TextBox">
            <Setter Property="Height" Value="24"/>
            <Setter Property="HorizontalAlignment" Value="Left"/>
            <Setter Property="Width" Value="48"/>
            <Setter Property="Padding" Value="2"/>
            <Setter Property="FontSize" Value="12"/>
            <Setter Property="IsReadOnly" Value="True"/>
            <Setter Property="TextAlignment" Value="Center"/>
            <Setter Property="TextWrapping" Value="NoWrap"/>
        </Style>

        <local:CTUConverter x:Key="ctuConverter"/>
        <local:CTDConverter x:Key="ctdConverter"/>
    </Window.Resources>

    <Grid>
        <Grid HorizontalAlignment="Left" Height="300" Margin="10,10,0,0" VerticalAlignment="Top" Width="285">
            <DataGrid x:Name="dgTimeline" AutoGenerateColumns="False"  HorizontalAlignment="Stretch" CanUserAddRows="False" CanUserResizeColumns="False" IsReadOnly="True" VerticalAlignment="Stretch" SelectionUnit="Cell" Grid.Row="1">
                <DataGrid.Columns>
                    <DataGridTemplateColumn Width="Auto">
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="186"/>
                                    </Grid.ColumnDefinitions>
                                    <Grid HorizontalAlignment="Stretch">
                                        <Grid.RowDefinitions>
                                            <RowDefinition Height="24" />
                                            <RowDefinition Height="1" />
                                            <RowDefinition Height="24" />
                                        </Grid.RowDefinitions>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="48*"/>
                                            <ColumnDefinition Width="1*" />
                                            <ColumnDefinition Width="48*"/>
                                            <ColumnDefinition Width="1*" />
                                            <ColumnDefinition Width="48*"/>
                                            <ColumnDefinition Width="1*" />
                                            <ColumnDefinition Width="48*"/>
                                        </Grid.ColumnDefinitions>
                                        <ContentPresenter Content="年" x:Name="Year" VerticalAlignment="Center" HorizontalAlignment="Center" Grid.ColumnSpan="7" />
                                        <Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Height="1" Grid.Row="1" Grid.ColumnSpan="7" />
                                        <ContentPresenter Content="1季度" Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                        <Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="1" />
                                        <ContentPresenter Content="2季度" Grid.Row="2" Grid.Column="2" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                        <Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="3" />
                                        <ContentPresenter Content="3季度" Grid.Row="2" Grid.Column="4" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                        <Rectangle Fill="#FFC9CACA" VerticalAlignment="Stretch" Width="1" Visibility="Visible" Grid.Row="2" Grid.Column="5" />
                                        <ContentPresenter Content="4季度" Grid.Row="2" Grid.Column="6" VerticalAlignment="Center" HorizontalAlignment="Center" />
                                    </Grid>
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <Grid>
                                    <TextBox  Margin=  "0,0,0,0" VerticalAlignment="Top" Text="{Binding Percentage0, Mode=OneWay, Converter={StaticResource ctuConverter}}"/>
                                    <TextBox  Margin= "48,0,0,0" VerticalAlignment="Top" Text="{Binding Percentage1, Mode=OneWay, Converter={StaticResource ctuConverter}}"/>
                                    <TextBox  Margin= "96,0,0,0" VerticalAlignment="Top" Text="{Binding Percentage2, Mode=OneWay, Converter={StaticResource ctuConverter}}"/>
                                    <TextBox  Margin="144,0,0,0" VerticalAlignment="Top" Text="{Binding Percentage3, Mode=OneWay, Converter={StaticResource ctuConverter}}"/>
                                    <TextBox  Margin=  "0,23,0,0" VerticalAlignment="Bottom">
                                        <TextBox.Text>
                                            <MultiBinding Converter="{StaticResource ctdConverter}">
                                                <Binding Path="Percentage0"/>
                                                <Binding Path="Sum"/>
                                            </MultiBinding>
                                        </TextBox.Text>
                                    </TextBox>
                                    <TextBox  Margin= "48,23,0,0" VerticalAlignment="Bottom">
                                        <TextBox.Text>
                                            <MultiBinding Converter="{StaticResource ctdConverter}">
                                                <Binding Path="Percentage1"/>
                                                <Binding Path="Sum"/>
                                            </MultiBinding>
                                        </TextBox.Text>
                                    </TextBox>
                                    <TextBox  Margin= "96,23,0,0" VerticalAlignment="Bottom">
                                        <TextBox.Text>
                                            <MultiBinding Converter="{StaticResource ctdConverter}">
                                                <Binding Path="Percentage2"/>
                                                <Binding Path="Sum"/>
                                            </MultiBinding>
                                        </TextBox.Text>
                                    </TextBox>
                                    <TextBox  Margin="144,23,0,0" VerticalAlignment="Bottom">
                                        <TextBox.Text>
                                            <MultiBinding Converter="{StaticResource ctdConverter}">
                                                <Binding Path="Percentage3"/>
                                                <Binding Path="Sum"/>
                                            </MultiBinding>
                                        </TextBox.Text>
                                    </TextBox>
                                </Grid>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>

        <!--<Button Content="Button" HorizontalAlignment="Left" Margin="432,154,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click"/>-->
    </Grid>
</Window>
r4 2014-03-07
  • 打赏
  • 举报
回复
public class DataX{ public ganttLine A_ { set; get; } public ganttLine B_ { set; get; } } List<GanttLine> _months = new List<GanttLine>() { new GanttLine() { start = System.DateTime.Now, end = System.DateTime.Now.AddMonths(4) }, new GanttLine() { start = System.DateTime.Now, end = System.DateTime.Now.AddMonths(72) } }; List<ganttLine> _dataX = dgTimeline.Items[0] as List<ganttLine>; _dataX[0].Months = _months; _dataX[0].Year = 2014; _dataX[0].sum = 245.0f; _dataX[0].percentage0 = 0.2f; _dataX[0].percentage1 = 0.25f; _dataX[0].percentage2 = 0.02f; _dataX[0].percentage3 = 0.175f; dgTimeline.Items.Add(new DataX() { A_ = new ganttLine(), B_ = new ganttLine() });
r4 2014-03-07
  • 打赏
  • 举报
回复

    public class GanttLine
    {
        public DateTime start { set; get; }
        public DateTime end { set; get; }
    }
    public partial class ganttLine : UserControl
    {
        public static DependencyProperty MonthsProperty =
            DependencyProperty.Register("Months", typeof(List<GanttLine>), typeof(ganttLine));

        public List<GanttLine> Months
        {
            get { return (List<GanttLine>)GetValue(MonthsProperty); }
            set { SetValue(MonthsProperty, value); }
        }
        public static DependencyProperty sumProperty =
           DependencyProperty.Register("sum", typeof(float), typeof(ganttLine),
           new FrameworkPropertyMetadata(0.0f, new PropertyChangedCallback(sumPropertyChangedCallback)));
        private static void sumPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs arg)
        {
            if (sender != null && sender is ganttLine)
            {
                ganttLine ctl = sender as ganttLine;
                ctl.OnSumUpdated((float)arg.OldValue, (float)arg.NewValue);
            }
        }
        public float sum
        {
            get { return (float)GetValue(sumProperty); }
            set { SetValue(sumProperty, value); }
        }

        public float percentage0
        {
            set
            {
                CTU0.Text = (value * 100.0f).ToString() + "%";
                CTD0.Text = (value * sum).ToString();
            }
            get
            {
                if (CTU0.Text.Length <= 1) return 0.0f;
                return (float)(Convert.ToDouble(CTU0.Text.Substring(0, CTU0.Text.Length - 1)));
            }
        }
        public float percentage1
        {
            set
            {
                CTU1.Text = (value * 100.0f).ToString() + "%";
                CTD1.Text = (value * sum).ToString();
            }
            get
            {
                if (CTU1.Text.Length <= 1) return 0.0f;
                return (float)(Convert.ToDouble(CTU1.Text.Substring(0, CTU1.Text.Length - 1)));
            }
        }
        public float percentage2
        {
            set
            {
                CTU2.Text = (value * 100.0f).ToString() + "%";
                CTD2.Text = (value * sum).ToString();
            }
            get
            {
                if (CTU2.Text.Length <= 1) return 0.0f;
                return (float)(Convert.ToDouble(CTU2.Text.Substring(0, CTU2.Text.Length - 1)));
            }
        }
        public float percentage3
        {
            set
            {
                CTU3.Text = (value * 100.0f).ToString() + "%";
                CTD3.Text = (value * sum).ToString();
            }
            get
            {
                if (CTU3.Text.Length <= 1) return 0.0f;
                return (float)(Convert.ToDouble(CTU3.Text.Substring(0, CTU3.Text.Length - 1)));
            }
        }
        public Int32 Year { set; get; }
        public ganttLine()
        {
            InitializeComponent();
            Year = 1900;
            Months = null;
            this.Loaded += new RoutedEventHandler(ganttLine_Loaded);
        }
        public void OnSumUpdated(float _old, float _value)
        {
            CTD0.Text = (_value * percentage0).ToString();
            CTD1.Text = (_value * percentage1).ToString();
            CTD2.Text = (_value * percentage2).ToString();
            CTD3.Text = (_value * percentage3).ToString();
        }
        void ganttLine_Loaded(object sender, RoutedEventArgs e)
        {
            if (null == Months) return;
            foreach (GanttLine _line in Months)
            {
                DateTime _S = new DateTime(_line.start.Year, _line.start.Month, 1);
                DateTime _E = new DateTime(_line.end.Year, _line.end.Month, 1);
                DateTime _time = new DateTime(Year, 1, 1);
                for (int _i = 0; _i < 12; _i++)
                {
                    if (_time >= _S && _time <= _E)
                    {
                        switch (_i)
                        {
                            case 0:  Month01.Visibility = Visibility.Visible; break;
                            case 1:  Month02.Visibility = Visibility.Visible; break;
                            case 2:  Month03.Visibility = Visibility.Visible; break;
                            case 3:  Month04.Visibility = Visibility.Visible; break;
                            case 4:  Month05.Visibility = Visibility.Visible; break;
                            case 5:  Month06.Visibility = Visibility.Visible; break;
                            case 6:  Month07.Visibility = Visibility.Visible; break;
                            case 7:  Month08.Visibility = Visibility.Visible; break;
                            case 8:  Month09.Visibility = Visibility.Visible; break;
                            case 9:  Month10.Visibility = Visibility.Visible; break;
                            case 10: Month11.Visibility = Visibility.Visible; break;
                            case 11: Month12.Visibility = Visibility.Visible; break;
                        }
                    }
                    _time = _time.AddMonths(1);
                }
            }
        }
    }
r4 2014-03-07
  • 打赏
  • 举报
回复
ganttLine是个UserControl

<UserControl x:Class="wpfDemo.ganttLine"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
             mc:Ignorable="d" 
             d:DesignHeight="48" d:DesignWidth="192
             " >
    <UserControl.Resources>
        <LinearGradientBrush x:Key="NormalBrush" EndPoint="0.5,1" StartPoint="0.5,0">
            <GradientStop Color="#FFEDA25E" Offset="0"/>
            <GradientStop Color="#FFEDA25E" Offset="0.5"/>
            <GradientStop Color="#FFFA7A05" Offset="1"/>
        </LinearGradientBrush>
        <LinearGradientBrush x:Key="EndPointBrush" EndPoint="0.5,1" StartPoint="0.5,0.0">
            <GradientStop Color="#FF3EB1EA" Offset="0"/>
            <GradientStop Color="#FF61BFF1" Offset="0.5"/>
            <GradientStop Color="#FF01A1F4" Offset="1"/>
        </LinearGradientBrush>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot">
        <StackPanel x:Name="Month" Margin="0" Width="192" Height="24" HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Top">
            <Rectangle x:Name="Month01" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth01" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month02" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth02" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month03" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth03" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month04" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth04" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month05" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth05" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month06" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth06" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month07" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth07" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month08" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth08" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month09" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth09" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month10" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth10" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month11" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth11" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
            <Rectangle x:Name="Month12" Fill="{DynamicResource NormalBrush}" StrokeThickness="1" Width="15" Visibility="Hidden"/>
            <Rectangle x:Name="Xonth12" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="1" Visibility="Hidden"/>
        </StackPanel>
        <StackPanel x:Name="EndPoint" Margin="0" Width="192" Height="24" HorizontalAlignment="Left" Orientation="Horizontal" VerticalAlignment="Top">
            <Rectangle x:Name="EP01" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP02" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP03" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP04" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP05" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP06" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP07" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP08" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP09" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP10" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP11" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
            <Rectangle x:Name="EP12" Fill="{DynamicResource EndPointBrush}" StrokeThickness="1" Width="16" Visibility="Hidden"/>
        </StackPanel>
        <TextBox Height="24" HorizontalAlignment="Left" Margin=  "0,0,0,0"  Name="CTU0" VerticalAlignment="Top" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" Text="0.0%" FontSize="12" Background="#00FFFFFF" FontStretch="Normal" TextAlignment="Center" TextWrapping="NoWrap" GotMouseCapture="CTU0_GotMouseCapture" />
        <!--<xctk:CalculatorUpDown Height="24" HorizontalAlignment="Left" Margin="0,0,0,0" Name="CNU0" VerticalAlignment="Top" Width="48" FormatString="P1" Increment="0.1" Maximum="1.0" Minimum="0" Visibility="Hidden" LostMouseCapture="CNU0_LostMouseCapture" />-->
        <TextBox Height="24" HorizontalAlignment="Left" Margin= "48,0,0,0"  Name="CTU1" VerticalAlignment="Top" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" Text="0.0%" FontSize="12" Background="#00FFFFFF" FontStretch="Normal" TextAlignment="Center" TextWrapping="NoWrap" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin= "96,0,0,0"  Name="CTU2" VerticalAlignment="Top" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" Text="0.0%" FontSize="12" Background="#00FFFFFF" FontStretch="Normal" TextAlignment="Center" TextWrapping="NoWrap" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin="144,0,0,0"  Name="CTU3" VerticalAlignment="Top" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" Text="0.0%" FontSize="12" Background="#00FFFFFF" FontStretch="Normal" TextAlignment="Center" TextWrapping="NoWrap" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin=  "0,23,0,0" Name="CTD0" VerticalAlignment="Bottom" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin= "48,23,0,0" Name="CTD1" VerticalAlignment="Bottom" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin= "96,23,0,0" Name="CTD2" VerticalAlignment="Bottom" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" />
        <TextBox Height="24" HorizontalAlignment="Left" Margin="144,23,0,0" Name="CTD3" VerticalAlignment="Bottom" Width="48" Padding="2" IsReadOnly="True" Cursor="Arrow" />
    </Grid>
</UserControl>
r4 2014-03-07
  • 打赏
  • 举报
回复
您能给我一个在DataGrid中使用用户控件的例子吗?我主要就是在这个问题上没搞清楚
r4 2014-03-07
  • 打赏
  • 举报
回复
那个进度条一样的东西一共有3*4=12个,根据传进来的Months列表和Year进行比较,如果Year+对应的块所表示的年/月在Months所表示的时间段内,这个对应的块就会被显示
r4 2014-03-07
  • 打赏
  • 举报
回复
左上角就是单独创建控件的效果 但是把控件当成DataGrid的元素就不能设置上面那8个TextBox的内容了
Bonjour-你好 2014-03-07
  • 打赏
  • 举报
回复
楼主的ganttLine是那个用户控件?如果是,看来你连DataGrid中添加数据的方法也错了。如果方便的话,建议你简化一下,提供一个Demo让别人来修改会更好。
Bonjour-你好 2014-03-07
  • 打赏
  • 举报
回复
大概猜到原因。如果方便,不知可否提供ganttLine的定义。等会有空试试我自己的想法看看。
r4 2014-03-07
  • 打赏
  • 举报
回复
就是一个复合表头,但是datagrid的表头个数是动态的,表格中的元素是一个用户控件,内容是4组TextBox,每组由两个TextBox组成,其中一个现实百分比数字,另外一个显示总数*百分比之后的结果
灬浪子灬 2014-03-07
  • 打赏
  • 举报
回复
不知道你想实现怎么样的效果
Bonjour-你好 2014-03-07
  • 打赏
  • 举报
回复
要不你说说,已知Months、Year、sum、percentage0~percentage3(因为我看你初始化是会初始化这几个属性)的值,界面对应的效果应该是怎么样,现在我只看懂CTD?和CTU?跟什么属性有关,而有些像进度条的效果我不太确定,还有那个sum是怎么计算也不是很懂(我自己对依赖属性也不是很会,所以如果我改的话,或许不使用依赖属性)。
r4 2014-03-07
  • 打赏
  • 举报
回复
用了依赖是因为那个sum属性希望能和另外一个dataGrid有绑定,我是第一次用wpf,C#也只是第二次用而已,很多东西都不了解,胡乱抄了一些而已。 请问我应该怎么做呢。 现在的想法是因为这个DataGrid的数据行和列都不是固定数目的,直接用Table绑定不好做,所以想按老习惯写,不用绑定,直接把需要的数据Add进去,但是一直没成功。
Bonjour-你好 2014-03-07
  • 打赏
  • 举报
回复
看了下,有几个问题,不知为何设计了依赖属性,但界面中貌似没有用到;在DataGrid中应该是有一些绑定语句的;dgTimeline.Items.Add(new DataX() { A_ = new ganttLine(), B_ = new ganttLine() }); 这里是想向DataGrid中添加一个用户控件?!如果是,那楼主是完全搞错用法了吧。 这里DataGrid显示不出数据的原因也是如此,而且我发觉楼主定义属性貌似跟我平时看的代码不一样,楼主的属性获取需要访问界面控件,感觉这样设计不太好。如果楼主一定要以上述基础来改,我还真不知道怎么改好。

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧