|
I was about to try Gerry's suggestion when I decided to test retriving the screen width with code and set the window size to it.
It worked, but I wonder, is there not a way to do this without using code in WPF?
Here is the code I used if someone is interested:
this.Width = System.Windows.SystemParameters.PrimaryScreenWidth+2; Note that +2 is there since the Windows Left parameter in the XML are set to -2, had to compensate for that or I get a small gap to the right.
I put it right below the "InitializeComponent();" call.
Have a nice day!
Thinking of getting a new IDE!
|
|
|
|
|
|
I have a DataGrid with a couple of DataGridTemplateColumns .
When I try to hit the Enter-key on my keyboard there is no new row created in the DataGrid.
I have other DataGrids with columns which are not DataGridTemplateColumns and I can then create new rows by hitting the Enter-key. So I assume the DataGridTemplateColumns in some way causing the problem.
I have made a reproducible code and I have made it public in this GIT-Gist.
* I use Fody PropertyChanged to handle all the INotificationPropertyChanged in my view models.
* The code should just be copy-and-paste.
The bindings between the View and the ViewModels also don't seem to work :S
But if you uncomment the row in the ViewModel's construcotor (please see line 60 in the MainWindow.xaml.cs), a new row in the DataGrid will be created. With this row, the bindings works as expected. I cannot understand why.
Here is the XAML-code. It maybe enough for you with only the XAML-code to solve this problem.
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<DataGrid ItemsSource="{Binding Rows}" AutoGenerateColumns="False" CanUserAddRows="True" Margin="0,50,0,0">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Browse">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Command="{Binding Browse}" Content="..." Width="40" Margin="6,0,6,0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="300" Header="Path" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Width="100" Header="Slider">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Slider Value="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Minimum="1" Maximum="50" Margin="6,0,6,0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Binding="{Binding Value}" Header="Value" IsReadOnly="True" />
</DataGrid.Columns>
</DataGrid>
</Window>
modified 8-Oct-19 7:33am.
|
|
|
|
|
Can't think of too many examples that use buttons and sliders in a data grid; data sources called "path" and "value"; and columns that are read-only. Worlds in collision.
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
|
|
|
|
|
The code I gave, is only an example how to reproduce the problem.
A real-life example of a button, textboxes and a slide is irrelevant.
My actual code contains of a button, a textbox, two numeric up down controls and a date picker in each row. All columns, except the textbox, are DataGridTemplateColumns.
Is there a solution to my problem?
|
|
|
|
|
How to assign a object from the List in c# linq
|
|
|
|
|
|
Rather than posting all these totally vague questions, your time would be better spent actually studying the programming language(s) that you are interested in using. You will not learn it from here.
|
|
|
|
|
The benefit of asking "clear questions" is that you might get an "answer", instead of another "question" asking you to clarify your question. You must have a lot of time on your hands to be able to deal with just more questions (and no answers).
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
|
|
|
|
|
how to convert in html value to real values in vb ?
|
|
|
|
|
|
Which grid is faster for 5000 records in vb.net?
1.DataTable
2.Flexigrid
3.Jgrid
|
|
|
|
|
The only way to find out is by running timing tests with your data.
|
|
|
|
|
The question is ridiculous, why are you even considering presenting 5000 record to the user.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
Helo everyone!
I have a Storyboard at Window resources as shown below.
<Window.Resources>
<Storyboard
x:Key="NB"
x:Name="NB_resource"
Completed="NB_resource_Completed"
RepeatBehavior="5x">
<ObjectAnimationUsingKeyFrames
Storyboard.TargetName="NB_image"
Storyboard.TargetProperty="Source"
Duration="0:0:1.2">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="pack://application:,,,/CircleSurrogateButton;component/Images/NB_00.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:.3">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="pack://application:,,,/CircleSurrogateButton;component/Images/NB_01.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:.6">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="pack://application:,,,/CircleSurrogateButton;component/Images/NB_02.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
<DiscreteObjectKeyFrame KeyTime="0:0:.9">
<DiscreteObjectKeyFrame.Value>
<BitmapImage UriSource="pack://application:,,,/CircleSurrogateButton;component/Images/NB_03.png" />
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
The Storyboard can be started with the following string which is placed in regular Button.
<EventTrigger RoutedEvent="PreviewMouseLeftButtonDown">
<BeginStoryboard Storyboard="{DynamicResource NB}" />
</EventTrigger>
A question is How to use a data binding in order to start that Storyboard.
For example:
<DataTrigger Binding="{Binding Start_Storyboard}" Value="true">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{DynamicResource NB}"/>
</DataTrigger.EnterActions>
</DataTrigger>
I've tried to put DataTrigger at different places and I had got nothing besides red squiggles and exception while debugging.
Thanks in advance!
|
|
|
|
|
How to Create auto complete textbox in wpf with ado.net
|
|
|
|
|
|
|
I'm working on a custom installation wizard. From it, I'm calling DISM to install IIS and ASP.Net if they're not installed. All the code in the installer class works fine when called from a console app. I'm now trying to put a simple UI on it.
There are 2 steps. Each step raises the event 'CurrentTaskChanged' with text "Installing IIS" or "Installing ASP.Net", and then during installation it raises a ProgressChanged event to send progress to the UI.
The problem is that none of the UI updates happen until the after the entire install process finishes.
Installer Class Code
public static void Install()
{
InstallIIS();
InstallASPDotNet();
}
private static void InstallIIS()
{
InstallFeature("IIS", "/Online /Enable-Feature /FeatureName:IIS-DefaultDocument /All");
}
private static void InstallASPDotNet()
{
InstallFeature("ASP.Net", "/Online /Enable-Feature /FeatureName:IIS-ASPNET45 /All");
}
private static void InstallFeature(string featureName, string args)
{
try
{
CurrentTaskChanged($"Installing {featureName}");
string dism = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "system32", "dism.exe");
if (Environment.Is64BitOperatingSystem && !Environment.Is64BitProcess)
{
dism = Path.Combine(Environment.ExpandEnvironmentVariables("%windir%"), "sysnative", "dism.exe");
}
var process = new Process();
var startInfo = new ProcessStartInfo
{
UseShellExecute = false,
CreateNoWindow = false,
RedirectStandardOutput = true,
FileName = dism,
Arguments = args
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, e) => HandleDISMOutput(e.Data);
process.Start();
process.BeginOutputReadLine();
process.StartInfo.Verb = "runas";
process.WaitForExit();
process.CancelOutputRead();
process.Close();
}
catch (Exception e)
{
throw;
}
}
private static void HandleDISMOutput(object data)
{
if (data != null)
{
var info = data.ToString();
if (info.Contains("%"))
{
info = info.Replace('[', ' ');
info = info.Replace(']', ' ');
info = info.Replace('=', ' ');
info = info.Replace(" ", "");
info = info.Replace("%", "");
double.TryParse(info, out double percent);
ProgressUpdated(percent);
}
}
}
UI Code
private void InstallExecuted()
{
RemoteServicesInstaller.CurrentTaskChanged += CurrentTaskChanged;
RemoteServicesInstaller.ProgressUpdated += ProgressUpdated;
RemoteServicesInstaller.Install();
}
private void CurrentTaskChanged(string action)
{
InstallAction = action;
Debug.Print(action);
}
private void ProgressUpdated(double percent)
{
InstallPercent = percent;
Debug.Print(percent.ToString());
}
The two handlers here at the bottom DO get called - the UI just doesn't update during install. I can see the Debug.Print code sending the percent to the debug console. The UI just doesnt refresh.
Anyone have any thougts? Thanks!
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
It's the usual problem - you're blocking the UI thread until the installation completes.
Move the installation code to a background thread using a BackgroundWorker .
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Ya, but the whole thing is in the UI thread. The VM creates the class, then calls it, and along the way events get raised to update - all in the same thread.
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
And that's the problem! If you block the UI thread, then the UI won't update.
Move the blocking code to a background thread. The simplest way to do that is using a BackgroundWorker [^].
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
How to Generate the SSRS report in WPF and explain through the code
|
|
|
|
|
|
How to Delete the multiple records in wpf datagrid using threetier architecture
|
|
|
|