我有一个ItemsControl包含动态可变数量的DataGrids:
<ItemsControl ItemsSource="{Binding Table.Columns}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Stretch"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplateSelector>
<local:ColumnTemplateSelector InputParameterColumnTemplate="{StaticResource InputParamterColumn}"
SingleParameterColumnTemplate="{StaticResource SingleParameterColumn}"/>
</ItemsControl.ItemTemplateSelector>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
"SingleParameterColumn"的模板定义如下:
<DataTemplate x:Key="SingleParameterColumn">
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Cells}"
RowHeight="25" RowHeaderWidth="0" >
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"
TextWrapping="Wrap"
TextAlignment="Center"
MaxWidth="60">
</TextBlock>
<Button>
<Image ... />
</Button>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplateSelector>....
</DataGridTemplateColumn.CellTemplateSelector>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
总有一个InputParameterColumn,至少有一个SingleParameterColumn.它InputParameterColumn具有固定的标题名称,而标题SingleParameterColumn可以任意长.
因为我不希望有很宽列我已经定义了MaxWidth的TextBlock在头模板60,这将导致头要高,如果一列的名称很长.
这会导致列具有不同的高度,具体取决于标题名称的长度.

有什么方法可以找出我的ItemsControl中最高的标题有多高,然后为所有其他标题设置相同的高度,以便我的列都具有相同的大小?
我有一个有多个"皮肤"的动态壁纸,用户可以在"设置"菜单中选择皮肤.我想要实现的目标如下:当用户设置动态壁纸然后再次导航到动态壁纸选择器时,我希望他/她能够在预览中看到其他皮肤的外观,但我想改变仅当用户再次单击"设置壁纸"按钮时已设置的动态壁纸的外观.为了实现这一点,我需要检测来自动态壁纸选择器的"设置壁纸"按钮的点击.有没有办法做到这一点?
我在ASP.NET MVC中实现了一个简单的pdf上传器,我需要处理上传的文档.因为处理可能需要一段时间,我希望这可以在后台完成.工作流程是这样的:我希望用户上传文档,当文档保存在数据库中时,他应该能够在网站上做其他事情,包括上传新文档.用户不应该在后台了解有关处理的任何信息.
我的实现看起来像这样:
[HttpPost]
public async virtual Task<ActionResult> Confirm(string author, string title)
{
//...
previousDocumentIsProcessing = true;
await InvokeDocumentProcessor(_document.Path, _document.DocumentID);
previousDocumentIsProcessing = false;
return View("Success");
}
Run Code Online (Sandbox Code Playgroud)
问题是在处理完成后正在显示"成功"视图.用户可以点击并执行其他操作,因为操作是异步的,但我想要创建后台进程,启动它并立即显示"成功"视图.用户不应该受到处理的困扰.
我怎样才能做到这一点?我已经尝试过后台工作者,但它没有工作(我收到错误,说那时异步进程无法启动).
我有一个动态创建的DataGrid与以下XAML:
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Cells}" IsReadOnly="True" Visibility="{Binding VisibilityStatus}"
CanUserResizeColumns="False" CanUserAddRows="False" RowBackground="{Binding Color}" Margin="0" RowHeight="25" HeadersVisibility="All">
<DataGrid.Columns>
<DataGridTemplateColumn Header="{Binding Path=Header}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding UniqueValuesToLapMapping.Keys, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedValue, Mode=TwoWay}"
SelectedIndex="0" Width="55"
Background="{Binding Color}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
除了标题之外,表格的所有内容都正确显示.无论我在哪个类中放置Header属性,我似乎无法绑定它.我已经尝试将它放入ViewModel,将它放入具有"Cells"属性的类中,并将其放入具有我在ComboBox中绑定的所有属性的类中.我也试过没有"Path ="的绑定,并将UpdateSourceTrigger设置为OnPropertyChanged并更改运行时的属性值:似乎没有任何效果.我在这里错过了什么?
这是我绑定到的所有这些类的属性:
private string _header = "TEST";
public string Header
{
get { return _header; }
set { SetField(ref _header, value, "Header"); }
}
Run Code Online (Sandbox Code Playgroud) 我正在使用SharpGL库在WPF中实现2D图形.我已经设法在屏幕上绘制一些原始对象,我需要检测这些对象上的鼠标点击.
我已经看过一个关于如何在图形对象上执行选择和拾取的OpenGL教程,但是我没有设法让它工作.在我的测试应用程序中,我在屏幕上绘制了三个三角形,当鼠标单击时,我在GL_SELECT模式下绘制相同的三个三角形,希望检测是否已经点击了任何三角形.我不确定这是否是正确的方法.命中测试始终返回选择缓冲区中的所有元素.
我知道PickMatrix中的宽度和高度参数不正确,我不确定那里的正确值是什么.它是整个视图的宽度和高度吗?
private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
{
//// Get the OpenGL object.
OpenGL gl = args.OpenGL;
//set background to white
gl.ClearColor(1.0f, 1.0f, 1.0f, 1.0f);
//// Clear the color and depth buffer.
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
DrawScene();
gl.Flush();
}
private void DrawScene()
{
OpenGL gl = openGLControl.OpenGL;
gl.Color(1.0, 0.0, 0.0);
DrawTriangle(-0.2, 0.6, 0.0, 0.8, 0.2, 0.6);
gl.Color(0.0, 1.0, 0.0);
DrawTriangle(-0.2, 0.2, 0.0, 0.4, 0.2, 0.2);
gl.Color(0.0, 0.0, 1.0);
DrawTriangle(-0.2, -0.2, 0.0, 0.0, 0.2, -0.2);
}
private void …Run Code Online (Sandbox Code Playgroud) 我正在尝试在频域中实现傅里叶变换.我相应地使用了getOptimalDFTSize,并且我在更大的图像中复制了图像和掩模,适合于傅里叶变换.我使用此处的示例代码作为参考.
现在,我必须将实部和虚部分开,并将图像虚部与像素虚部一起按像素相乘,对于实部则相同.但是当我尝试这样做时,我得到以下错误信息:
OpenCV错误:断言失败(在= mulSpectrums中键入== srcB.type()&& srcA.size()== srcB.size()),文件/build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp ,第1855行/build/buildd/opencv-2.1.0/src/cxcore/cxdxt.cpp:1855:错误:(-215)type == srcB.type()&& srcA.size()== srcB.size( )在函数mulSpectrums中
代码如下:
//fourier transfromation of real and imaginary part
Mat complex_image, real_image, complex_mask, real_mask;
cv::dft(new_image, complex_image, DFT_COMPLEX_OUTPUT);
cv::dft(new_image, real_image, DFT_REAL_OUTPUT);
cv::dft(new_mask, complex_mask, DFT_COMPLEX_OUTPUT);
cv::dft(new_mask, real_mask, DFT_REAL_OUTPUT);
//pixelwise multiplication
Mat multiplied_complex, multiplied_real;
cv::mulSpectrums(complex_image, complex_mask, multiplied_complex, DFT_COMPLEX_OUTPUT );
cv::mulSpectrums(real_image, real_mask, multiplied_real, DFT_REAL_OUTPUT);
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
c# ×3
wpf ×3
android ×1
asp.net ×1
asp.net-mvc ×1
async-await ×1
mvvm ×1
opencv ×1
opengl ×1
sharpgl ×1
wpfdatagrid ×1
xaml ×1