|
Hello,
My goal is to add dynamically some control to the main window.
When the user preeses mouse right button on the window the position where the button pressed is the top left of the control, then the user keeps the button pressed and drags the mouse on the window and the position where he releses the button is the right bottom of the control.
What i want is while the user drags the mouse while he is pressed is that some square appear on the screen to show user the size of the control that will be created.
This is exactly like when you try to create new fence on youre desktop with the "Fences" application.
|
|
|
|
|
And your problem is?
Never underestimate the power of human stupidity
RAH
|
|
|
|
|
My problem is how to paint the square on the window while thw user moves the mouse with right button pressed:
I want the square to be transparent but vissible and his size changing if the user move the mouse
|
|
|
|
|
Although I don't really get your question fully and I don't know what Application platform (WPF or Silverlight or Winform)you're using but I will suggest this. You need to work with three parameters: The height of your square, the width and the mouse pointer position. You will need to do some math to calculate a new width and height for your square based on the position of the mouse pointer.
I will suggest that you make your question more clearer so that people can really understand you and help you out.
|
|
|
|
|
Drag and Drop in Silverlight 2[^] is a nice and useful article on this topic.
Another nice example can be found right here[^].
Too much of heaven can bring you underground
Heaven can always turn around
Too much of heaven, our life is all hell bound
Heaven, the kill that makes no sound
|
|
|
|
|
Hi,
What is the difference between windows 7 86x and 64x ?
I would like to purchase a laptop with windows 7 for silverlight, wpf and windows phone 7, sql server 2008 developments.
I know I can install the sql server 2008 express and visual studio 2010 express on windows 7 but not sure whether to have 86x or 64x.
Any thoughts please?
Thanks
|
|
|
|
|
x86 is 32 bit and x64 is 64 bit hardware, so you need to get the version that matches your hardware. If you are buying a totally new system then go for 64 bit.
|
|
|
|
|
To confirm, for the purpose of developing using sql server 2008 express, visual studio 2010 express and windows phone 7, then it is ok to have windows 7 home edition 64 bit?
Thanks
|
|
|
|
|
arkiboys wrote: for the purpose of developing using sql server 2008 express, visual studio 2010 express and windows phone 7
This is not a software issue, you can only use 64-bit software on a PC that has 64 bit hardware. If your PC is not a 64-bit machine then you cannot install 64-bit software on it.
|
|
|
|
|
The machine is a 64bit hardware... and comes with windows 7 home edition 64bit.
for the purpose of developing using sql server 2008 express, visual studio 2010 express and windows phone 7 is the home edition ok for my purposes?
Thank you
|
|
|
|
|
|
|
arkiboys wrote: is the home edition ok for my purposes?
Short answer: Yes.
But you may wish to check here[^] also.
|
|
|
|
|
|
Hello everyone,
I am making a sample application test with WPF creating some UserControls to increase maintainability.
In this way I created a toolbar usercontrol where I put a combobox and I created a dependency property, since it's the best tool for binding than datacontext when having more than one binding, and in main xaml I called a xmldataprovider loading a xml file to fill the combo box in the UserControl.
in the toolbar's usercontrol xaml file I put
<ComboBox ItemsSource="{Binding Path=epToolbarItemSource, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" DisplayMemberPath="shortname" />
In the toolbar's usercontrol xaml.cs file I declared the dependency property as:
public static DependencyProperty ItemSourceToolbarProperty;
static epToolbar()
{
epToolbar.ItemSourceToolbarProperty = DependencyProperty.Register("epToolbarItemSource", typeof(IEnumerable),
typeof(epToolbar));
}
public IEnumerable ItemSourceToolbar
{
get { return (IEnumerable)GetValue(epToolbar.ItemSourceToolbarProperty); }
set { SetValue(epToolbar.ItemSourceToolbarProperty, value); }
}
In the Window.xaml file I declared the xmldataprovider as:
<XmlDataProvider x:Key="dpOperators" XPath="operators" Source="/Data/Operators.xml" IsInitialLoadEnabled="True" />
and I declared the usercontrol setting the dependency property I thought it was correctly declared, epToolbarItemSource:
<uc:epToolbar DockPanel.Dock="Top" epToolbarItemSource="{Binding Source=dpOperators, Mode=TwoWay}" />
In the examples found about Dependency Properties I always read the dependency property can be called as a property attribute when calling the usercontrol but in this case it says an error like: "The property 'epToolbarItemSource' was not found in type 'epToolbar'."
So I am asking here what's the right syntax to bind the content of xml file to the combo in the way I add new operators in the xmldataprovider so they would be inserted in xml file and refreshed the combo box?
Thanks in advance to all
Cheers, Luigi
modified on Sunday, August 14, 2011 12:48 PM
|
|
|
|
|
Ok,Sort of new to WPF and MVVM I have a function to populate a treeview control on a User Control. I placed the code to populate the treeview list inside the code portion of the User Control. I need to update this treeview list by calling the function from inside another hosted User Control. How do I do this?
I have added #include Manufactured_Housing_Manager which is the projects namespace I've even tried #using tv = Manufactured_Housing_Manager.Treeview, which was the name of the usercontrol.
How can I call the update from another User Control
|
|
|
|
|
**NEVER** build a TreeView by hand. ESPECIALLY in WPF/MVVM. You should build a simple nested collection and then use a HierarchicalDataTemplate to define how to populate the TreeView from that collection. The collection(s) should implement INotifyCollectionChanged and the objects inside of the collection(s) should implement INotifyPropertyChanged. Then just simply set the ItemsSource of the TreeView to point to your collection and sit back and watch the magic happen. If you do this, any changes you make to your collection(s) and item(s) will auto-magically be reflected in the UI.
|
|
|
|
|
How do I populate that type of Treeview? I've created a listview such like you said for my MRU list I need to populate the Treeview with sorted data by Alphabetic base letter A-Z then Lastname, Firstname middle intial. I'm already using a collection:
using System;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace Manufactured_Housing_Manager
{
public class tvIndex
{
private string _index;
public string Index
{
get { return _index; }
set { _index = value; }
}
private ObservableCollection<Contact> _contacts;
public ObservableCollection<Contact> Contacts
{
get
{
if (_contacts == null)
_contacts = new ObservableCollection<Contact>();
return _contacts;
}
}
public tvIndex()
{
}
public tvIndex(
string indexx,
ObservableCollection<Contact> contacts)
{
_index = indexx;
_contacts = contacts;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Manufactured_Housing_Manager
{
public class Contact
{
private string _name;
private int _id;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Id
{
get { return _id; }
set { _id = value; }
}
public Contact()
{
}
public Contact(string name, int id)
{
_name = name;
_id = id;
}
}
}
My Xaml is this:
<UserControl x:Class="Manufactured_Housing_Manager.Outlookbar"
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:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Manufactured_Housing_Manager"
mc:Ignorable="d"
>
<UserControl.Resources>
<Style x:Key="TreeViewStyle1" TargetType="{x:Type TreeView}">
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/>
<Setter Property="BorderBrush" Value="{StaticResource ListBorder}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
<Setter Property="ScrollViewer.PanningMode" Value="Both"/>
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeView}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
<ScrollViewer x:Name="_tv_scrollviewer_" Background="{TemplateBinding Background}" CanContentScroll="True" Focusable="false" HorizontalScrollBarVisibility="{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalScrollBarVisibility="{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}" Template="{DynamicResource ScrollViewerControlTemplate1}" >
<ItemsPresenter ScrollViewer.HorizontalScrollBarVisibility="Visible" ScrollViewer.CanContentScroll="True"/>
</ScrollViewer>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
</Trigger>
<Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
<Setter Property="CanContentScroll" TargetName="_tv_scrollviewer_" Value="true"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<!--
<HierarchicalDataTemplate x:Key="ChildTemplate">
<StackPanel Orientation="Horizontal">
<Image x:Name="img2" Width="16" Height="16" Stretch="Fill" Source="Images\closedfolder16.png" />
<TextBlock Text="{Binding Path=Name}" Margin="5,0" ToolTip="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MyTreeViewStyle"
ItemsSource="{Binding Path=Contacts}"
ItemTemplate="{StaticResource ChildTemplate}">
<!--
<StackPanel Orientation="Horizontal">
<Image x:Name="img" Width="16" Height="16" Stretch="Fill" Source="Images\closedfolder16.png" />
<TextBlock Text="{Binding Path=Index}" Margin="5,0" ToolTip="{Binding Path=Index}"/>
</StackPanel>
</HierarchicalDataTemplate>
</UserControl.Resources>
<DockPanel>
<Grid>
<Border Margin="5,5,0,0" Grid.ColumnSpan="2" BorderThickness="1" BorderBrush="lightGray" CornerRadius="3" Height="24" Width="Auto" VerticalAlignment="Top" HorizontalAlignment="Stretch">
<TextBlock Margin ="5,0" Name="tbOutlookBar" VerticalAlignment="Center" Text="Contacts" Foreground="#FF355AAF" FontSize="14" />
</Border>
<Border Name="OutlookBarInfo" DockPanel.Dock="Left" Margin="5,28,0,0" Background="White" Height="24" Width="Auto" VerticalAlignment="Top" HorizontalAlignment="Stretch" BorderThickness="1" BorderBrush="lightGray" CornerRadius="3">
<TextBlock Margin ="5,0" Name="tbOutlookBarInfo" VerticalAlignment="Center" Text=" " Foreground="Black" FontSize="12" />
</Border>
<TabControl Margin="5,52,0,5" Grid.RowSpan="2" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" TabStripPlacement="Bottom" Style="{DynamicResource OutlookTabControlStyle}" >
<TabItem Height="24" Style="{DynamicResource OutlookTabItemStyle}" Background="{DynamicResource OutlookButtonBackground}" Foreground="{DynamicResource OutlookButtonForeground}" ToolTip="Contacts">
<!--
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Name="img" Source="Images/contact16.png" Stretch="Fill" Height="16" Width="16" Margin="0,3" />
<TextBlock Text="Contacts" Margin="3,0,0,0" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<Grid>
<TreeView ItemsSource="{x:Static local:RibbonControl.contactdata}" x:Name="MyTreeView" ItemTemplate="{StaticResource MyTreeViewStyle}" ScrollViewer.CanContentScroll="True" Style="{DynamicResource TreeViewStyle1}">
<!--
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</Grid>
</TabItem>
<TabItem Grid.ColumnSpan="2" Height="24" Style="{DynamicResource OutlookTabItemStyle}" Background="{DynamicResource OutlookButtonBackground}" Foreground="{DynamicResource OutlookButtonForeground}" ToolTip="Calendar">
<!--
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Name="img2" Source="Images/calendar16.png" Stretch="Fill" Height="16" Width="16" Margin="0,3" />
<TextBlock Text="Calendar" Margin="3,0,0,0" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<Grid>
<!--
</Grid>
</TabItem>
</TabControl>
</Grid>
</DockPanel>
</UserControl>
almost forgot the code inside the User Control:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Collections.ObjectModel;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Manufactured_Housing_Manager;
namespace Manufactured_Housing_Manager
{
public partial class Outlookbar : UserControl
{
public DataTable dtContacts = new DataTable();
public DataTable dtDealerPacks = new DataTable();
public DataTable dtServices = new DataTable();
public DataRow rowContacts;
public DataRow rowDealerPacks;
public DataRow rowServices;
public string filename;
public string connectionString;
static public ObservableCollection<Contact> contactdata;
public Outlookbar()
{
InitializeComponent();
}
#region Update TreeView
private void updateTreeview()
{
if (Properties.Settings.Default.dbOpen)
{
for (int i = System.Convert.ToInt32('A'); i <= System.Convert.ToInt32('Z'); i++)
{
MyTreeView.Items.Add(new tvIndex(Convert.ToString((char)(i)), contactdata));
contactdata = new ObservableCollection<Contact>();
string sContactsName = null;
foreach (DataRow rowContacts in Properties.Settings.Default.DtContacts.Rows)
{
sContactsName = string.Concat(rowContacts["LastName"].ToString(), ", ", rowContacts["FirstName"].ToString());
if (!(System.Convert.IsDBNull(rowContacts["MiddleInitial"].ToString())))
{
if (!(rowContacts["MiddleInitial"].ToString() == ""))
sContactsName = string.Concat(sContactsName, " ", rowContacts["MiddleInitial"].ToString(), ".");
}
if (left(sContactsName, 1) == Convert.ToString((char)(i + 1)))
{
string temp = rowContacts["ContactID"].ToString();
contactdata.Add(new Contact(sContactsName, Convert.ToInt32(temp)));
}
}
}
if (Properties.Settings.Default.DtContacts.Rows.Count < 2)
{
tbOutlookBarInfo.Text = Properties.Settings.Default.DtContacts.Rows.Count + " Contact";
tbOutlookBarInfo.ToolTip = Properties.Settings.Default.DtContacts.Rows.Count + " Contact";
}
else
{
tbOutlookBarInfo.Text = Properties.Settings.Default.DtContacts.Rows.Count + " Contacts";
tbOutlookBarInfo.ToolTip = Properties.Settings.Default.DtContacts.Rows.Count + " Contacts";
}
}
}
#endregion
}
}
modified on Friday, August 12, 2011 1:36 PM
|
|
|
|
|
You mean, you want your tree to look like:
A
ALastName, AFirstName
ALastName2, AFirstName2
B
BLastName, BFirstName
BLastName2, BFirstName
?
|
|
|
|
|
Yeah I already have this doing it but not in this wpf version. I was hosting everything inside one form and had several classes. Now I'm trying to properly create user controls for the ribbon the treeview/outlook bar, statusbar, and tabs which will display records. Basically I'm trying to improve my coding techniques and more correctly adapt to MVVM style. Old dog trying to learn new tricks.
|
|
|
|
|
Haha... yeah, MVVM is a learning curve on top of the WPF learning curve. Trust me though, I come from the MFC / C++ world and did a bit of time in the C# / Winforms world... the WPF / MVVM way is by far the best. It results in *really* clean code.
Anyways...
Your data structure should kind of try to closely mirror how you want it in the tree. Obviously we aren't going to be modifying the alphabet any time soon, so we have 26 root nodes. I'd probably try to store it in something like:
public class ContactCollection : ObservableCollection<Contact>
The reason you need to do that is because XAML doesn't work well with generics.
SortedDictionary<char, ContactCollection>
so you'll populate the sorted dictionary with keys 'A' through 'Z' and new up an ContactCollection as the value. Then populate each ContactCollection with the names matching that letter. There is a little known trick to sort the ObservableCollections after you populate them. You derive a class from ObservableCollection<t> and add a method like this:
public void Sort(Comparison<T> comparison)
{
((List<T>)Items).Sort(comparison);
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
Then your HierachialDataTemplate would just specify Key as the top level display binding and Values as the ItemsSource. Another HierachialDataTemplate would be typed for Contact and have the name as the display value.
This all might not make sense now, but once you get going, it will.
|
|
|
|
|
Kind of understand some but still confused. Below is the class I'm constructing
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
namespace Manufactured_Housing_Manager
{
public class ContactCollection : ObservableCollection<Contact>
{
#region left, right, mid string functions
public static string left(string param, int length)
{
string result = param.Substring(0, length);
return result;
}
public static string mid(string param, int startIndex, int length)
{
string result = param.Substring(startIndex, length);
return result;
}
public static string right(string param, int length)
{
string result = param.Substring(param.Length - length, length);
return result;
}
#endregion
public ContactCollection() : base()
{
Add(new Contact("Davis, Adam T.", 0));
Add(new Contact("Zappa, Frank M.", 1));
Add(new Contact("Henry, Victor", 2));
Add(new Contact("Vern, Jules W.", 3));
}
}
public class Contact
{
private string _name;
private int _id;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Id
{
get { return _id; }
set { _id = value; }
}
public Contact()
{
}
public Contact(string name, int id)
{
_name = name;
_id = id;
}
}
}
Thing is I need to open my OLEDB Database to populate my dataset then I populate ObservableCollection<contact> with the names from each Contact in my database. I used the following code in the past to populate the tree and concate the names into one name information field I used to display.
for (int i = System.Convert.ToInt32('A'); i <= System.Convert.ToInt32('Z'); i++)
{
MyTreeView.Items.Add(new tvIndex(Convert.ToString((char)(i)), contactdata));
contactdata = new ObservableCollection<Contact>();
string sContactsName = null;
foreach (DataRow rowContacts in Properties.Settings.Default.DtContacts.Rows)
{
sContactsName = string.Concat(rowContacts["LastName"].ToString(), ", ", rowContacts["FirstName"].ToString());
if (!(System.Convert.IsDBNull(rowContacts["MiddleInitial"].ToString())))
{
if (!(rowContacts["MiddleInitial"].ToString() == ""))
sContactsName = string.Concat(sContactsName, " ", rowContacts["MiddleInitial"].ToString(), ".");
}
if (left(sContactsName, 1) == Convert.ToString((char)(i + 1)))
{
string temp = rowContacts["ContactID"].ToString();
contactdata.Add(new Contact(sContactsName, Convert.ToInt32(temp)));
}
}
In this way I simply added the base A-Z to the parent Node in the Treeview and then bound childnodes to the contactdata name and assigned the id to pull up the record.
My confusion stems from trying to implement the proper way of doing the same thing in this new public class based on ContactCollection : ObservableCollection<contact>.
As you can see I added a base which can manually add names and id's to the Collection. This gives me a certain amount of sample data to see if binding is correct. I should place my code here that imports my Dataset information, Concats the Last,First,MI into one name value and gives the id.
modified on Friday, August 12, 2011 4:35 PM
|
|
|
|
|
Ok, so your ROOT object is going to be a:
SortedDictionary<char, ContactCollection>
So you would do something like:
SortedDictionary<char, ContactCollection> dict = new SortedDictionary<char, ContactCollection>();
for (int i = System.Convert.ToInt32('A'); i <= System.Convert.ToInt32('Z'); i++)
{
ContactCollection cc = new ContactCollection();
foreach (...)
{
}
dict.Add(System.Convert.ToChar(i), cc);
}
tv.ItemsSource = dict;
Your contact object also needs to implement INotifyPropertyChanged for this all to work correctly.
Report what your tree looks like on the screen and we can tweak the HierarchialDataTemplate to display the right content.
|
|
|
|
|
One last problem I think. How do I get tv.ItemsSource = dict;
to work. I get, An object reference is required for the non-static field, method, or property 'Manufactured_Housing_Manager.Outlookbar.MyTreeView'
I tried adding this to the tope of this class
using tv = Manufactured_Housing_Manager.Outlookbar;
also this is my xaml for binding
it's inside Outlookbar.xaml
<HierarchicalDataTemplate x:Key="ChildTemplate">
<StackPanel Orientation="Horizontal">
<Image x:Name="img2" Width="16" Height="16" Stretch="Fill" Source="Images\closedfolder16.png" />
<TextBlock Text="{Binding Path=Name}" Margin="5,0" ToolTip="{Binding Path=Name}"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate x:Key="MyTreeViewStyle"
ItemsSource="{Binding Path=Contact}"
ItemTemplate="{StaticResource ChildTemplate}">
<!--
<StackPanel Orientation="Horizontal">
<Image x:Name="img" Width="16" Height="16" Stretch="Fill" Source="Images\closedfolder16.png" />
<TextBlock Text="{Binding Path=Index}" Margin="5,0" ToolTip="{Binding Path=Index}"/>
</StackPanel>
</HierarchicalDataTemplate>
modified on Friday, August 12, 2011 7:49 PM
|
|
|
|
|
I know I'm over thinking this. The whole Observable Collections thing is new to me. I'm confusing myself and getting discouraged. I created a hierarchical observable collection that worked before. but populating the class with data from my user selected OLE database was done outside the class. I can vaguely see how this is supposed to work , I'm just not visualizing the code to make it happen very well.
All of you help has been and is appreciated.
|
|
|
|
|