|
Great idea...
It's off to the code-cave!
|
|
|
|
|
You're doing "measures" and "arranges" based on a control whose dimensions you have not ascertained.
What was a number in Win 7 could now be a NAN in Win 10, or vise-versa.
You use the debugger, "Live Visual Tree" and "Live property view" to confirm the heights and width are inherited / accessed as expected.
The Master said, 'Am I indeed possessed of knowledge? I am not knowing. But if a mean person, who appears quite empty-like, ask anything of me, I set it forth from one end to the other, and exhaust it.'
― Confucian Analects
|
|
|
|
|
Good points. Thanks, Gerry
|
|
|
|
|
I have a 50,000 line Windows done by someone else that I need to migrated to a WPF. It has 35 forms. I need to do it gradually. I have found article to use both kinds of forms in the same project.
How well does it work? I know it will be clunky for awhile.
So many years of programming I have forgotten more languages than I know.
|
|
|
|
|
It depends on how independent the forms are. If they don't have lots of dependencies on each other, the experience of hosting them is fairly seamless. The styling, on the other hand....
|
|
|
|
|
I never thought about the styling. Thanks for the reminder.
There is one main form with a large panel in the middle and navigation buttons and status summaries around it. There are 3 panel forms and 2 tab containers. Each tab contains a separate form. They are all loaded and running all the time. Only one shows at a time. There are also a bunch of popups.
So many years of programming I have forgotten more languages than I know.
|
|
|
|
|
bonjour,
J'ai un RichTextBox dans le quel il y a un FlowDocument
je crée un tableau par code
le tableau s'affiche correctement
je le sauvegarde en RTF .
je perds les mises en forme
seul le Background est bon
Merci de votre réponse
un bout du code
Google Translate: Hello,
I have a RichTextBox in which there is a FlowDocument
I create a table by code
the table is displayed correctly
I save it in RTF.
I lose the formatting
only the Background is good
Thank you for your reply
a piece of code
private void button2_Click_1(object sender, RoutedEventArgs e)
{
Table T = new Table();
myFlowDoc.Blocks.Add(T);
T.CellSpacing = 1;
for (int x = 0;x<5;x++) { T.Columns.Add(new TableColumn()); }
T.Columns[0].Background = Brushes.Beige;
T.Columns[0].Width = new GridLength(200);
T.Columns[1].Width = new GridLength(150);
T.Columns[2].Width = new GridLength(60);
T.Columns[3].Width = new GridLength(100);
T.Columns[4].Width = new GridLength(100);
T.BorderThickness = new Thickness(1);
T.BorderBrush = Brushes.Red;
T.RowGroups.Add(new TableRowGroup());
T.RowGroups[0].Rows.Add(new TableRow());
TableRow currentRow = T.RowGroups[0].Rows[0];
currentRow.FontWeight = FontWeights.Bold;
currentRow.Background = Brushes.Silver;
currentRow.FontSize = 20;
TableCell TC = new TableCell();
currentRow.Cells.Add(TC);
TC.TextAlignment = TextAlignment.Center;
myParagraph = new Paragraph(new Run("Résultat des mesures "));
TC.Blocks.Add(myParagraph);
|
|
|
|
|
This is an English language site, and we can only respond to questions in that language. I have used Google Translate to modify your question, but you should check that the English meaning is unchanged from your original.
In future, please use Google or Bing to translate your French to English.
And please, use the "code" widget (or select "Code Block" when you paste code samples to ensure that the formatting is preserved.
Sent from my Amstrad PC 1640
Never throw anything away, Griff
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
AntiTwitter: @DalekDave is now a follower!
|
|
|
|
|
There is no direct way to get "rtf" from a RichTextBox.
In terms of "saving and restoring", do the following:
How to: Save, Load, and Print RichTextBox Content | Microsoft Docs
The Master said, 'Am I indeed possessed of knowledge? I am not knowing. But if a mean person, who appears quite empty-like, ask anything of me, I set it forth from one end to the other, and exhaust it.'
― Confucian Analects
|
|
|
|
|
Hello
Thank you for your reply
Difficult for me, I do not speak English
My problem: I create a table by code. It is displayed well.
I record it in RTF. I lose the formatting. Size Bold ...
but the Background is good (currentRow.Background = Brushes.Silver;)
If I change with a button
example: Command = "ToggleBold"
the formatting is preserved
Very weird
THANK YOU :
the grandpa who went to computer without speaking a word of English
|
|
|
|
|
A WPF RichTextBox uses XAML internally; not RTF.
They should have called it XamlBox, I guess.
The Master said, 'Am I indeed possessed of knowledge? I am not knowing. But if a mean person, who appears quite empty-like, ask anything of me, I set it forth from one end to the other, and exhaust it.'
― Confucian Analects
|
|
|
|
|
I have this WPF ListBox:
<pre><ListBox Grid.Row="4"
Grid.Column="1"
ItemsSource="{Binding RuleActionsList}"
SelectionMode="Multiple"
Margin="5"
Style="{StaticResource ListBoxStyle}">
<pre>
<i:Interaction.Behaviors>
<cls:MultiSelectionBehavior SelectedItems="{Binding SelectedRuleActions}" />
</i:Interaction.Behaviors>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource enumDescConv}}"
Margin="2"/>
</DataTemplate>
</ListBox.ItemTemplate>
The SelectedItems is bound to a behavior that update the ListBox's SelectedItems list. This part works fine.
The question is, how do I validate that there is at least one list item selected? Where do you set ValidatesOnNotifyDataErrors?
For other properties on the model, Iset ValidatesOnNotifyDataErrors=True and then do:
private void ValidateProperty(string propertyName)
{
if (RuleGroup.Errors.TryGetValue(propertyName, out List<string> errors))
{
errors.Clear();
}
else
{
errors = new List<string>();
}
switch (propertyName)
{
case "GroupName":
if (RuleGroup.GroupName == null)
{
errors.Add("The Group Name cannot be empty");
}
break;
}
RuleGroup.Errors[propertyName] = errors;
if (errors.Count > 0)
{
RuleGroup.RaiseErrorsChanged(propertyName);
}
}
and then
private void RuleGroup_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
ValidateAll();
}
The property chaneg calls the validate, and for any property that is invalid I see the red box around the field in the ui.
But how do I do the same for the SelectedItems property?
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
modified 22-Jul-19 15:45pm.
|
|
|
|
|
I have a Contacts control. On the left side is the list of contacts. I created two DataTempates for the list items in the Control's resources.
Above the list are two buttons, List View and Card View. When they are selected, I want to change the data template of the list items accordingly.
Here's a picture of Outlook Contacts showing the People button selected above the list. When one of the Current View buttons is selected, the list box items look different. This is what I'm looking for:
https://www.brycematheson.io/wp-content/uploads/2018/04/Image1_Blurred-1024x713.jpg
I have a DataTemplateSelector, but when it' called the container property is the ListItem. How do I know in the DataTemplateSelector what view mode was selected in the ViewModel?
By DataTemplateSelector
public class ContactViewDataTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = container as FrameworkElement;
ContactsView view = container as ContactsView;
switch (view.ViewMode)
{
case ContactsView.ViewModes.Card:
return element.FindResource("cardViewTemplate") as DataTemplate;
break;
case ContactsView.ViewModes.List:
return element.FindResource("listViewTemplate") as DataTemplate;
break;
}
return null;
}
}
DataTemplates
<cls:ContactViewDataTemplateSelector x:Key="contactViewDataTemplateSelector" />
<DataTemplate x:Key="listViewTemplate">
<TextBlock Text="{Binding DisplayName}"
FontSize="18"/>
</DataTemplate>
<DataTemplate x:Key="cardViewTemplate">
<pre>
<Border Padding="2"
Margin="2"
BorderBrush="SteelBlue"
BorderThickness="1"
CornerRadius="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding FullName}"
FontWeight="Bold"
Foreground="Black"
FontSize="18"/>
<TextBlock Text="{Binding Title}"
Foreground="Black"
FontSize="18"/>
<TextBlock Text="{Binding Company}"
Foreground="Black"
FontSize="18"/>
</Grid>
</Border>
ListBox
<ListBox Grid.Row="0"
Grid.Column="0"
ItemsSource="{Binding Contacts, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedItem="{Binding SelectedContact, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
ItemTemplateSelector="{StaticResource contactViewDataTemplateSelector}"
MinWidth="175"
Margin="2"/>
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
You've got the ListItem ; you just need to use something like this function[^] to walk up the tree to find the control, and grab its DataContext property, which should be your ContactsView .
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
The problem is that the DataTemplateSelector gives me the ContactEntity, not the ListItem
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
That did it. Here's what I came up with:
<pre>public static class VisualTreeExtensions
{
public static T FindParentOfType<T>(this DependencyObject child) where T : DependencyObject
{
DependencyObject parentDepObj = child;
do
{
parentDepObj = VisualTreeHelper.GetParent(parentDepObj);
T parent = parentDepObj as T;
if (parent != null) return parent;
}
while (parentDepObj != null);
return null;
}
}
If it's not broken, fix it until it is.
Everything makes sense in someone's mind.
Ya can't fix stupid.
|
|
|
|
|
Hey guys I've written a small app that allows you to drag files from your desktop or explorer into a Listbox this creates a list of files to be backed up on a certain date and time you have selected. Every thing works perfectly fine in debug running from visual Studio 2019. Once I switch to release and attempt to create an install shield setup for it, The setup works fine and it installs but it shows a no symbol when you try to drag files into the Listbox. I've read that you must change the app.Manifest to an elevated setting but I tried that with no success. Please any help figuring this out would be very much appreciated.
|
|
|
|
|
User Control:
1. Dropdown box of States (not all states, list from database via View Model.
2. A listbox of Counties based on state selection. The county name for county and the code for the county is what the parent forms will bind to the code for the county selection. State abbreviations will be used for both state selection and selected value.
Various forms need the user control to get state and County and bind to the database selection.
I know how to set up MVVM. And can write the VM and Model with data access.
I have not set up the view model yet
I want the user control to handle the logic of the state and county selections
here is the xaml:
<usercontrol x:class="Controls.StateCounty"
="" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns ="http://schemas.microsoft.com/expression/blend/2008" mc:ignorable="d" d:designheight="300" d:designwidth="120">
<grid>
<stackpanel orientation="Vertical" grid.row="0" grid.column="0" grid.rowspan="3">
<textblock text="State" margin="5" horizontalalignment="Center">
<combobox x:name="StateCbx" height="20" width="50" margin="5"
="" horizontalalignment="Center" verticalcontentalignment="Center" horizontalcontentalignment="Center" itemssource="{Binding States}" selecteditem="{Binding SelectedState}">
<textblock text="County" margin="5" horizontalalignment="Center">
<listbox x:name="CountyListBox"
="" minheight="100" minwidth="100" margin="5" horizontalalignment="Center" itemssource="{Binding Counties}" selecteditem="{Binding SelectedCounty}">
<listbox.itemtemplate>
<datatemplate>
<stackpanel orientation="Horizontal">
<textblock margin="0,0,4,1" minwidth="40" text="{Binding ID}">
<textblock margin="0,0,0,1" text="{Binding Name}">
Code behind VB, but help in C# is apricated.
Namespace Controls
Public Class StateCounty
Public Property CountySelectedItem() As Object
Get
Return DirectCast(GetValue(CountySelectedItemProperty), Object)
End Get
Set
SetValue(CountySelectedItemProperty, Value)
End Set
End Property
' Using a DependencyProperty as the backing store for CountySelectedItem. This enables animation, styling, binding, etc...
Public Shared ReadOnly CountySelectedItemProperty As DependencyProperty =
DependencyProperty.Register("CountySelectedItem", GetType(Object), GetType(ListBox), New UIPropertyMetadata(Nothing))
Public Sub New()
InitializeComponent()
AddHandler CountyListBox.SelectionChanged, AddressOf CountyListBox_SelectionChanged
End Sub
Private Sub CountyListBox_SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
CountySelectedItem = CountyListBox.SelectedItem
End Sub
End Class
End Namespace
Thanks in Advance
modified 12-Jun-19 2:03am.
|
|
|
|
|
Hi,
I'm trying to use a contentpresenter to display different usercontrols but after replacing the previous one the data context is still active.
For instance, I set the content to View1, then replace it by View2, then trigger an event and it goes back to the ViewModel1.
It gets even worse. If I set a view multiple times (caused by navigation), I will get an hit at the event handler for each time I’ve set it.
Any ideas?
Thanks in advance
|
|
|
|
|
I do not believe the ContentPresenter was intended to host (multiple) "user controls"; which in turn host their own content.
Just load the user controls into the "content" where you previously stuck the content presenter. Or stick them all in the same "hole" (grid "cell") and collapse the ones that aren't applicable in the current context.
Talk about data contexts and event handlers has nothing to do with where you're at.
The Master said, 'Am I indeed possessed of knowledge? I am not knowing. But if a mean person, who appears quite empty-like, ask anything of me, I set it forth from one end to the other, and exhaust it.'
― Confucian Analects
|
|
|
|
|
Hi Gerry,
Thanks for your reply.
The application I’m developing will be used to present several states of a process and ask for user inputs when required.
Each user control represents a step and as the process evolves, the user controls are replaced with the correct one.
My need to have them “dismissed” is related with events subscribed by several ones, for instance a barcode read that is required in different steps.
If releasing the views/ViewModels (VM) is not possible I’ll have to manage the event handlers to ensure that the correct VM is processing it.
Tried to bind the data context (DC) in xaml, tried to set it when assigning the view to the presenter, even tried to launch windows, but what ever I do, even after closing the windows, and set the DC to null, the VM stays alive.
My last try was using pages instead of user controls, same result.
Hope my description is not too confusing.
Regards
|
|
|
|
|
A user control can be completely self contained (as a "view") if designed properly: initializing itself during user control loading ONCE; setting event handlers; etc.
By loading them all, and "hiding them", you can maintain state.
The UWP and WPF UI Grids allow you to put multiple controls in the same cell so they "overlay" (versus pushing each other apart as in other "panel" controls). You "show" them as needed.
The "page" model has a (UWP) option that maintains state for you and handles "some" navigation. In this case, you put the user control in a "page" versus a Window.
So, WPF, UWP, page model or not, you still need to design and manage your user controls properly.
The Master said, 'Am I indeed possessed of knowledge? I am not knowing. But if a mean person, who appears quite empty-like, ask anything of me, I set it forth from one end to the other, and exhaust it.'
― Confucian Analects
|
|
|
|
|
I know WPF.Core hasn't been released yet...
But just a simple Hello Word, selfcontained, WPF app is about 100Mb
Does anyone knows or can take a good guess whether it will be smaller when officially released?
Any action the developer can take to reduce the size of such apps?
[EDIT] for clarity:
I got .NET Core 3.0 preview 5.
All I just did is create new empty WPF project, all it has is a single empty window. And not that much code at all.
Then I chose publish to folder, selfcontained, win-x64.
And boom, 125Mb directory! Cry |
BTW what is the "framework dependent" deployment mode?
The publish folder is only 300kb.. But I am unsure as to what it depends on... I guess .NET Core 3 runtime on the target machine? It's probably an OK option.
In fact I am unsure when one would chose selfcontained then, since the installer can make sure the .NET Core 3 runtime is installed...
modified 2-Jun-19 22:48pm.
|
|
|
|
|
If you have created it from a template then you probably have 50mb of scaffolding and classes you may not require.
Never underestimate the power of human stupidity -
RAH
I'm old. I know stuff - JSOP
|
|
|
|
|
I got .NET Core 3.0 preview 5.
All I just did is create new empty WPF project, all it has is a single empty window. And not that much code at all.
Then I chose publish to folder, selfcontained, win-x64.
And boom, 125Mb directory!
I have absolutely no idea what are those "scaffolding class" you mention, nor how they could take up 50Mb of space....
BTW what is the "framework dependent" deployment mode?
The publish folder is only 300kb.. But I am unsure as to what it depends on... I guess .NET Core 3 runtime on the target machine?
|
|
|
|
|