我将在这里回答我自己的问题,因为我花了几个小时将它拼凑在一起并想分享我发现的东西,希望我能拯救别人挖掘.
有一个MSDN演练可以帮助你完成大部分工作,但我在其他地方找到了几个关键部分.例如,演练告诉您将行[System :: STAThreadAttribute]放在_tWinMain()定义之前,但如果您正在实现标准MFC应用程序,那么您的源代码中没有_tWinMain().
如果这里的任何内容不清楚,请随时提问,我会编辑答案以使事情更清楚.
我现在正在做一个显示系统中HDD使用情况的应用程序.为此,我想动态生成网格和控件(如进度条和标签)以显示用法.是否有可用于此目的的XAML模板?
我有一个3列2行的网格
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
Run Code Online (Sandbox Code Playgroud)
我左下角的单元格,我有一个数据网格,AutoGenerateColumns = True,可以加载很多行.我想要做的是使数据网格高度最大化以适应窗口,并且用户能够使用数据网格滚动条来上下滚动行.
会发生什么是数据网格流动的窗口底部,即使我设置了
ScrollViewer.VerticalScrollBarVisibility="Visible"
Run Code Online (Sandbox Code Playgroud)
对于datagrid,滚动条无效,行向下流动.不知何故,数据网格不受限制......
该怎么办?
我在进度条实时显示更新时遇到了一些麻烦.
这是我现在的代码
for (int i = 0; i < 100; i++)
{
progressbar1.Value = i;
Thread.Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,进度条在函数运行时显示为空,然后在函数完成运行之前没有任何内容.有人可以向我解释如何做到这一点?我是C#/ WPF的新手,所以我不能100%确定如何在不同的线程上实现Dispatcher(如其他一些帖子所示)来解决这个问题.
为了澄清,我的程序有一个按钮,按下时,从文本框中获取值,并使用API检索信息,并根据它创建标签.我希望在每行数据处理完毕后更新进度条.
这就是我现在所拥有的:
private async void search(object sender, RoutedEventArgs e)
{
var progress = new Progress<int>(value => progressbar1.Value = value);
await Task.Run(() =>
{
this.Dispatcher.Invoke((Action)(() =>
{
some pre-processing before the actual for loop occur
for (int i = 0; i < numberofRows; i++)
{
label creation + adding
((IProgress<int>)progress).Report(i);
}
}));
});
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
当我尝试使用.net framework 4.6.2构建WPF项目时,我收到一个错误,因为FormattedText()已被废弃如下: [已废弃("使用PixelsPerDip覆盖",false)] public FormattedText(string textToFormat, CultureInfo culture,FlowDirection flowDirection,Typeface typeface,double emSize,Brush foreground);
新的覆盖方法是 public FormattedText(string textToFormat,CultureInfo culture,FlowDirection flowDirection,Typeface typeface,double emSize,Brush foreground,double pixelsPerDip);
问:如何确定pixelsPerDip?
问:如何使用没有pixelsPerDip?的旧构造函数,因为pixelsPerDip对我的项目没用.
我有重绘WPF控件的问题.
WPF控件作为Windows窗体的ElementHost.Child添加.
当Windows 7进入节电模式并恢复正常时(通过在键盘上移动鼠标或按键),其余的Windows表单控件将重新绘制,但WPF部分不会重新绘制(并且Win 7背景在该地区).
在最小化和最大化应用程序时,WPF部分被重新绘制.
有人对这个问题有任何想法吗?
我正在使用以下按钮样式,它消除了边框并使透明背景形成我的图像按钮:
<Style x:Key="EmptyButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Background" Value="#00000000"/>
<Setter Property="BorderBrush" Value="#00000000"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
样式来自以下答案: 带有圆形图像的WPF按钮
现在的问题是无论实际按钮有多大,可点击区域都被限制在图像中:

我的按钮代码:
<Button Name="n02" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Style="{DynamicResource EmptyButtonStyle}" Canvas.Left="308" Canvas.Top="157" Height="106" Width="120">
<Image Source="boto_face_off.PNG" Height="61" Width="59" />
</Button>
Run Code Online (Sandbox Code Playgroud)
问题:如何使整个按钮区域对点击作出反应?我想让它保持透明,没有现在的边框.
是否有可能将内容包装成StackPanel?
我知道我们可以使用一个WrapPanel代替.但是出于代码修改的原因,我必须使用a StackPanel.
那么,有没有办法StackPanel在说出5件物品后把物品包起来......谢谢!
有没有办法删除(删除)添加到CanvasC#(在WFP中)的所有图像(子)?
我在视图中有以下标记.当我WindowContainer.Width在视图的启动代码中获取时,它返回NaN.
<Border BorderThickness="10">
<StackPanel x:Name="Panel" Orientation="Vertical" >
<Grid x:Name="WindowContainer" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Loaded="WindowContainer_OnLoaded">
<delphi:Win32WindowHost x:Name="Host" />
</Grid>
<TextBlock x:Name="InfoTextBlock" HorizontalAlignment="Right" />
</StackPanel>
</Border>
Run Code Online (Sandbox Code Playgroud)
是否Stretch使网格伸展以容纳其所有内容,或填充其容器?我希望它伸展以填充容器,Border并且具有适当的double宽度,我可以使用它来调整浮动窗口的大小.