|
I'm not sure why you'd need to call a method on the VM to start editing a cell in the grid?
The other alternative is to use a behaviour, as described in this SO answer:
c# - Single click edit in WPF DataGrid - Stack Overflow[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
That behavior is just what I'm looking for. I said use the code behind because all the examples I found on enabling cell editing use a row or cell selection event.
Thanks.
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Hello,
Whenever I'm trying to create a new window in a WPF project (C# or VB) in Visual Studio 2010, it fails to load the designer of the window and shows an error describing: Quote: Could not load type 'Microsoft.Expression.DesignModel.Core.ISharedInstanceBuilder' from assembly 'Microsoft.Expression.DesignModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.'
However, I've Visual Studio 2017 installed in my PC too. But it doesn't show this message and WPF projects open and run just fine in it. Even, my WinForms projects in Visual Studio 2010 run absolutely fine. The problem is with WPF projects only.
Why am I getting this error in Visual Studio 2010 and how do I solve this problem? Please help.
Regards,
Priyam
|
|
|
|
|
Trying to design with Blend, and Blend is not installed? Using a more "recent" version of Visual Studio would probably help.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
You're right Gerry. I also have VS 2017 installed in the same PC, but it works absolutely fine. As I'm working on a project that was originally done with VS 2010 and the client is unwilling to upgrade at this point, hence, I was looking for a workaround. I found a thread here that discusses on the problem in details. It seems there's a lot of issues dealing with this problem in VS 2010 that involves installing, uninstalling and re-installing quite a few utilities. Keeping this in mind, it's better to shift to VS 2017 as it runs butter smooth. Instead of wasting time on configuring VS 2010, I'll now have to try to spend it in convincing my client to upgrade.
|
|
|
|
|
I have created a user control that wraps a Barcode Reader SDK. I used it like this:
<local:BarcodeScannerView RegistrationName="{Binding DataContext.RegistrationName, ElementName=window}"
RegistrationKey="{Binding DataContext.RegistrationKey, ElementName=window}"
Camera="{Binding DataContext.CameraName, ElementName=window}"
BarcodesToFind="{Binding DataContext.Barcodes, ElementName=window}"
ResolutionHeight="{Binding DataContext.ResolutionHeight, ElementName=window}"
ResolutionWidth="{Binding DataContext.ResolutionWidth, ElementName=window}"
ScanDelay="{Binding DataContext.ScanDelay, ElementName=window}"
PlaySound="{Binding DataContext.PlaySound, ElementName=window}"
Enabled="True"/>
The problem is that I really need Enabled to fire last, AFTER all the other DP values have been set. What I'd like it to have all property values set, THEN allow Enabled to turn on the camera. Right now, Enabled seems to fire FIRST.
So, is there a way to control the firing sequence of the DP's?
One idea is to to some kind of setup involving all the other DP's when Enabled is set.
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
|
This is a school assignment I have, just so you know.
A quick overview of my assignment is, that I create a UML class diagram for a game, and from those classes create a class library in C#.
That class library has to be imported into a WPF project where I use those classes and create a functioning game.
The point of the assignment is for the students to practice object oriented programming, so everything has to be in classes that we create ourselves.
The problem is, I'm am not too well-versed in WPF. I know that if I doubleclick on a button-control, code will automatically be generated where I can manipulate with different controls and data etc, but I don't know how a method in an instantiated object (or a static one) from a class library can get called when I click on a button-control, and then use that method to change text content in fx. a label.
I was thinking of creating a "UIManager" class that updates the WPF controls depending on the game state, but I have no idea how to create methods that will take WPF controls as parameters, in a class that is in a class library. For some reason I can't use the "using" statement to use the WPF specific namespaces in my class library project, but I don't even know if that is the solution to my problem.
I emphasize the class library because it is a requirement that it is done that way.
Any help, hint or guidance is very much appreciated.
|
|
|
|
|
If you want to create a WPF class library that can also include WPF "windows" XAML and code-behind, then just add references to the dll's that are normally "missing" versus a straight WPF "exe" (like Framework.dll, etc.)
Same goes for the "user controls" included in said class library.
I don't think you're being asked to actually "manipulate" the XAML.
Study one of the WPF Toolkits: that illustrates the type of architecture you're going after.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
Thanks for the fast reply!
I think I know what you mean, so I'll try to figure it out.
|
|
|
|
|
i copied 5 dlls into the folder specified in the ModulePath use the code in Bootstrapper:
protected override IModuleCatalog CreateModuleCatalog()
{
DirectoryModuleCatalog catelog = new DirectoryModuleCatalog();
catelog.ModulePath = @".\Modules";
return catelog;
} .
but after the application started ,only 4 of the modules were loaded.
but if i use
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(moduleA));
moduleCatalog.AddModule(typeof(moduleB));
moduleCatalog.AddModule(typeof(moduleC));
moduleCatalog.AddModule(typeof(moduleD));
moduleCatalog.AddModule(typeof(moduleE));
}
all the modules will be loaded properly.
Who can tell me what's wrong with my code ?Thanks in advance.
|
|
|
|
|
I created a copy of my App.Config called "Release.Config". When I do a Release build, the following Post Build code is run:
if "Debug"=="$(ConfigurationName)" goto :nocopy
del "$(TargetPath).config"
copy "$(ProjectDir)\Release.config" "$(TargetPath).config"
:nocopy
This renames the file "Release.Config" to the output folder as "App.Config".
The problem is that the Visual Studio installer seems to be taking the Debug App.Config, not the Release version. Doesn't the installer project use the release code?
Anyone have any ideas on this?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Kevin Marois wrote: Visual Studio installer Are you actually using VS Installer to deploy your application?
I would think the Configuration Manager would be the appropriate tool to deploy an application (never used VS Installer).
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
Mycroft Holmes wrote: Are you actually using VS Installer to deploy your application?
Yes
Mycroft Holmes wrote: I would think the Configuration Manager would be the appropriate tool to deploy an application (never used VS Installer).
How would that hepl? The problem isn't the configurataion. When I do a release build, the correct app.config is in Bin\Release. The proble is that the installer isn't getting the right App.Config. it's somehow getting the app.config from bin\debug.
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
You could try using a configuration transform instead. Unfortunately, Visual Studio only supports them in web projects, but there's an add-in which adds support for other projects:
Configuration Transform - Visual Studio Marketplace[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Great I'll take a look. Thanks
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
That was what I was talking about, they are supported for WPF projects as well.
It is called Configuration Manager, you automatically get the debug config and need to set up a release config. The release config holds only the section that apply to the release with a replace directive and the deployment operation replaces the relevant sections and creates a config file.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
I'm trying to get the AForge VideoSourcePlayer to work in a WPF app. It's a WinForms control hosted in a WindowsFormsHost. I can't get this to work ina WinForms app either, but I'm targeting WPF in the end.
XAML
<Grid>
<pre>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0"
Grid.Column="0"
x:Name="connectBt"
Height="32"
Width="100"
Margin="10,0,2,0"
Click="ConnectBt_Click"
Content="Connect"/>
<Button Grid.Row="0"
Grid.Column="1"
x:Name="disconnectBt"
Height="32"
Width="100"
Margin="2,10,10,10"
Click="DisconnectBt_Click"
Content="Disconnect"/>
<wfi:WindowsFormsHost Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="2">
<aforge:VideoSourcePlayer x:Name="videoSourcePlayer"
Dock="Fill"/>
</wfi:WindowsFormsHost>
Code Behind
public partial class MainWindow : Window
{
#region CTOR
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
videoSourcePlayer.NewFrame += VideoSourcePlayer_NewFrame;
videoSourcePlayer.Height = 320;
videoSourcePlayer.Width = 320;
}
#endregion
#region Private Methods
private void Connect()
{
FilterInfoCollection videoDevices = new FilterInfoCollection(FilterCategory.VideoInputDevice);
if (videoDevices.Count == 0)
{
throw new ApplicationException();
}
var selectdDevice = videoDevices[0].MonikerString;
VideoCaptureDevice videoSource = new VideoCaptureDevice(selectdDevice);
OpenVideoSource(videoSource);
}
private void Disconnect()
{
if (videoSourcePlayer.VideoSource != null)
{
videoSourcePlayer.SignalToStop();
videoSourcePlayer.WaitForStop();
}
}
private void HandleNewFrame(ref Bitmap image)
{
}
private void OpenVideoSource(IVideoSource source)
{
videoSourcePlayer.SignalToStop();
videoSourcePlayer.WaitForStop();
videoSourcePlayer.VideoSource = source;
videoSourcePlayer.Start();
}
#endregion
#region Event Handlers
private void Window_Unloaded(object sender, RoutedEventArgs e)
{
Disconnect();
}
private void ConnectBt_Click(object sender, RoutedEventArgs e)
{
Connect();
}
private void DisconnectBt_Click(object sender, RoutedEventArgs e)
{
Disconnect();
}
private void VideoSourcePlayer_NewFrame(object sender, ref Bitmap image)
{
HandleNewFrame(ref image);
}
#endregion
}
When I run this, the VideoSourcePlayer displays "Connecting..." but i never does. The camera moniker string is "@device:pnp:\\?\usb#vid_046d&pid_082d&mi_00#6&39ab8351&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global". it's a Logitech USB camera.
Anyone have any experience with this?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Adding background as Transparent for WindowsFormsHost worked for me.
<wfi:windowsformshost x:name="VideoSourceWindowsFormsHost" width="100" height="50" grid.row="2" grid.column="1"
="" background="Transparent">
<controls:videosourceplayer x:name="videoSourcePlayer" width="250" height="250">
|
|
|
|
|
I copied the TextBox template from here into my resources. I just want to study it and see how things work, and the TextBox seems simple enough.
I created a a CustomControl of type TextBox called TextBoxEx. I pasted the style into the Generic.xml in the Themes folder, and it doesn't work.
With this code line of in the CTOR, the Border doesn't show up.
public class TextBoxEx : TextBox
{
static TextBoxEx()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TextBoxEx), new FrameworkPropertyMetadata(typeof(TextBoxEx)));
}
}
If I comment the line out, the border appears.
if go into the style and change
<Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BorderMediumColor}" />
</Border.BorderBrush>
to a StaticResource
<Border.BorderBrush>
<SolidColorBrush Color="{StaticResource BorderMediumColor}" />
</Border.BorderBrush>
Then it works ok.
What's going on here?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
I have this DataGrid with three columns:
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Col1" Width="100" />
<DataGridTextColumn Header="Col2" Width="Auto" />
<DataGridTextColumn Header="Col3" Width="100" />
</DataGrid.Columns>
</DataGrid> I would like 'Col3' to always be at the right side of the DataGris regardless how wide the DataGrid is.
Since 'Col1' and 'Col3' has fixed widths, 'Col2' is free to dynamically change width.
Is this possible to "Dock" 'Col3' to the right side of the DataGrid?
I'm looking for a solution simular to a DockPanel:
<DataGrid LastChildFill="true">
<Label Content="Col1" DockPanel.Dock="Left" />
<Label Content="Col3" DockPanel.Dock="Right" />
<Label Content="Col2" />
</DockPanel>
|
|
|
|
|
You mean "visible"? If you define it "on the right", it stays there. If the preceding columns are "too wide", you have to add scroll bars.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
|
|
|
|
|
You can "freeze" one of more columns, but only on the left-hand side:
DataGrid.FrozenColumnCount Property (System.Windows.Controls) | Microsoft Docs[^]
You might be able to make it appear on the right-hand side with a custom template, but it would probably require a lot of work.
If you just want column 2 to fill the remaining space, set its width to * :
<DataGridTextColumn Header="Col2" Width="*" />
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Hum... too bad...
Thanks for the reply anyway!
|
|
|
|
|
I want to create a datagrid with dynamic row and column.
I know how create a datagrid and bind the Itemsource.
How define the dynamic column ?
Perhaps you have a short example.
<DataGrid
x:Name="ListViewFiles"
MaxWidth="2560"
MaxHeight="1600"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserSortColumns="True"
CellStyle="{StaticResource Content_DataGrid_Centering}"
DockPanel.Dock="Top"
EnableColumnVirtualization="True"
EnableRowVirtualization="True"
ItemsSource="{Binding Path=CloudInterface.ListViewFile}"
PreviewMouseLeftButtonDown="Drag_PreviewMouseLeftButtonDown"
PreviewMouseMove="ListViewFiles_PreviewMouseMove"
RowHeaderWidth="0"
ScrollViewer.CanContentScroll="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding ConfigItem.MostRecentConfigFile.Product}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<DockPanel>
<Label Content="{Binding Lab_Product, Source={StaticResource Resources}}" />
</DockPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="5" />
<Setter Property="Padding" Value="5" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding ConfigItem.MostRecentConfigFile.ArchitectureSoftwareVersion}">
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<DockPanel>
<Label Content="{Binding Lab_Version, Source={StaticResource Resources}}" />
</DockPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="5" />
<Setter Property="Padding" Value="5" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
|
|
|
|