问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

WPF中如何动态设置控件宽度为厘米

发布网友 发布时间:2022-04-22 17:55

我来回答

2个回答

热心网友 时间:2023-05-19 11:46

WPF动态改变grid行宽或者列高,需要创建GridLength的动画类。
(一) 创建一个支持GridLength类型的动画类
新建一个继承AnimationTimeLine的类GridLengthAnimation, 简单实现2个依赖属性"From", "To".代码如下:
internal class GridLengthAnimation : AnimationTimeline
{
static GridLengthAnimation()
{
FromProperty = DependencyProperty.Register("From", typeof(GridLength),
typeof(GridLengthAnimation));

ToProperty = DependencyProperty.Register("To", typeof(GridLength),
typeof(GridLengthAnimation));
}

public static readonly DependencyProperty FromProperty;
public GridLength From
{
get
{
return (GridLength)GetValue(GridLengthAnimation.FromProperty);
}
set
{
SetValue(GridLengthAnimation.FromProperty, value);
}
}

public static readonly DependencyProperty ToProperty;
public GridLength To
{
get
{
return (GridLength)GetValue(GridLengthAnimation.ToProperty);
}
set
{
SetValue(GridLengthAnimation.ToProperty, value);
}
}

接下来就来依次重载或者实现AnimationTimeLine类的成员,
1. 重载CreateInstanceCore, 代码如下:
protected override System.Windows.Freezable CreateInstanceCore()
{
return new GridLengthAnimation();
}

2. 重载GetCurrentValue以返回动画的当前值, 代码如下:
public override object GetCurrentValue(object defaultOriginValue,
object defaultDestinationValue, AnimationClock animationClock)
{
double fromVal = ((GridLength)GetValue(GridLengthAnimation.FromProperty)).Value;
double toVal = ((GridLength)GetValue(GridLengthAnimation.ToProperty)).Value;

if (fromVal > toVal)
{
return new GridLength((1 - animationClock.CurrentProgress.Value) * (fromVal - toVal) + toVal,
((GridLength)GetValue(GridLengthAnimation.FromProperty)).GridUnitType);
}
else
return new GridLength(animationClock.CurrentProgress.Value * (toVal - fromVal) + fromVal,
((GridLength)GetValue(GridLengthAnimation.ToProperty)).GridUnitType);
}

3. 重写TargetPropertyType 属性以指示相应的动画所生成输出的Type, 代码如下:
public override Type TargetPropertyType
{
get
{
return typeof(GridLength);
}
}

ok, 通过上面的步骤我们已经写好了GridLengthAnimation类, 接下来就是如何使用此类.
(二)xaml使用此类, 代码如下:
<Window.Resources>
<Storyboard x:Key="sbDock">
<common:GridLengthAnimation BeginTime="00:00:00" Storyboard.TargetName="_cellLeft" Storyboard.TargetProperty="Width">

</common:GridLengthAnimation>
</Storyboard>
</Window.Resources>

<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="_cellLeft" Width="300"/>
<ColumnDefinition x:Name="_cellRight" Width="*"/>
</Grid.ColumnDefinitions>
</Grid>

(三)c#使用此类, 代码如下:
Storyboard sbDock = this.FindResource("sbDock") as Storyboard;
if (sbDock != null)
{
SplineDoubleKeyFrame sdKeyFrame1 = new SplineDoubleKeyFrame(TransformRadius,
KeyTime.FromTimeSpan(TimeSpan.FromSeconds(1)));
(sbDock.Children[0] as DoubleAnimationUsingKeyFrames).KeyFrames.Clear();
(sbDock.Children[0] as DoubleAnimationUsingKeyFrames).KeyFrames.Add(sdKeyFrame1);
(sbDock.Children[1] as GridLengthAnimation).From = new GridLength(300, GridUnitType.Pixel);
(sbDock.Children[1] as GridLengthAnimation).To = new GridLength(0, GridUnitType.Pixel);

sbDock.Begin();
}

热心网友 时间:2023-05-19 11:46

后台代码指定第 i 行的高:
this.grid.RowDefinitions[i].Height = new GridLength(int, GridUnitType.Pixel);
// GridUnitType.Pixel 表示像素。
希望对你有帮助。追问很久都没来看了。 如果是动态加载Label或者Border其他的控件,我想指定它的Height和Width怎么去写呢?

追答控件的Height和Width是Double类型,直接赋值就行,例如
Border bd= new Border();
bd.Height = 300.0;
bd.Width = 500.0;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
工科考研50分数学能过国家线吗 数一工科国家线一般多少分 笔记本电脑无线连接epson爱普生打印机wifi怎么连接 爱普生如何无线连接 身份证注销了银行卡还可以用吗 8424西瓜是哪里产的? 一个人开两个支付宝是同一个二维码吗 买个衣服很生气,投诉无门, 拉夏贝尔衣服可以退吗 断桥铝门窗有多少种 怎样使delphi里的控件随窗体的大小变化而变化 室内设计现代风格毕业论文 超级急~~~ c#如何实现窗体最大化的时候,窗体上的控件随之变化 C#中怎么使控件随着窗体的大小改变而改变 本人初学WPF,现在编写了一个UserControl,如何让这个控件自适应加载窗体的宽度和高度适应不同分辨率显示 如何设置WebBrowser控件的字体大小 C#,WPF应用程序,最大化的时候,控件就不按窗口的比例进行缩放了,请问有什么办法可以有效解决这个问题么 c#windows应用程序 如何让控件随着窗体的大小而改变 WPF 除了设置MAX还有什么办法设置控件不撑大 WPF中运行时窗体最大化但richTextBox没随之变大,求解决!! c#窗体程序界面怎样随着窗口大小变换 山东临沂有什么特产 WPF中如何让窗体自动适应窗体里的控件大小 WPF 窗口最大化后控件位置变动 怎样蒸枣山馍 过年枣山馒头的做法 C# wpf 想让控件随着窗口大小变化而变化 四季果光开花不结果什么原因 WPF下如何让控件大小跟着窗口的大小变化而变化 有山东的人吗?山东特产是什么? vb6.0怎么让窗体里的控件随着窗体的变化而改变大小? 求一的成语 环艺专业(室内)有哪些好的毕业论文题目 石安牧场怎么样 台湾便利店有没有溏心蛋,7-11有吗? GBA牧场物语中飞行石如何拿到 蒸腐皮面卷的美味做法? 牧场物语之飞行石 牧场怎麽炼铜 求好听的DJ舞曲? 求好听的DJ,谁有推荐一下、 蓝琪儿 - 大情歌 - DJ版mp3百度云 广场舞,一般都用什么样的音乐?名字都是什么? 404 Not Found 半枝莲的功效与作用有哪些? 半边莲有何功效? 半枝莲的功效与作用有哪些 孕妇可以吃半枝莲吗 紫花地丁、半枝莲的功效。 半枝莲是什么? 请问补气血的食物都有哪些?