小编mob*_*tte的帖子

当设置标题的MaxWidth时,为所有DataGridColumns应用相同的高度

我有一个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可以任意长.

因为我不希望有很宽列我已经定义了MaxWidthTextBlock在头模板60,这将导致头要高,如果一列的名称很长.

这会导致列具有不同的高度,具体取决于标题名称的长度. 这是问题:

有什么方法可以找出我的ItemsControl中最高的标题有多高,然后为所有其他标题设置相同的高度,以便我的列都具有相同的大小?

c# wpf xaml

9
推荐指数
1
解决办法
562
查看次数

检测点击动态壁纸选择器中的"设置壁纸"按钮

我有一个有多个"皮肤"的动态壁纸,用户可以在"设置"菜单中选择皮肤.我想要实现的目标如下:当用户设置动态壁纸然后再次导航到动态壁纸选择器时,我希望他/她能够在预览中看到其他皮肤的外观,但我想改变仅当用户再次单击"设置壁纸"按钮时已设置的动态壁纸的外观.为了实现这一点,我需要检测来自动态壁纸选择器的"设置壁纸"按钮的点击.有没有办法做到这一点?

android live-wallpaper

5
推荐指数
1
解决办法
1028
查看次数

启动后台任务ASP.NET MVC 4.5

我在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)

问题是在处理完成后正在显示"成功"视图.用户可以点击并执行其他操作,因为操作是异步的,但我想要创建后台进程,启动它并立即显示"成功"视图.用户不应该受到处理的困扰.

我怎样才能做到这一点?我已经尝试过后台工作者,但它没有工作(我收到错误,说那时异步进程无法启动).

c# asp.net asp.net-mvc async-await asp.net-mvc-4

5
推荐指数
1
解决办法
6334
查看次数

DataGridTemplateColumn标头绑定

我有一个动态创建的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)

c# wpf mvvm wpfdatagrid

5
推荐指数
1
解决办法
2724
查看次数

SharpGL-使用选择和拣选检测鼠标单击OpenGL元素

我正在使用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)

opengl wpf sharpgl

5
推荐指数
1
解决办法
2572
查看次数

用opencv进行频域傅里叶变换

我正在尝试在频域中实现傅里叶变换.我相应地使用了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)

我在这做错了什么?

opencv

2
推荐指数
1
解决办法
3884
查看次数