|
Funnily enough, I've just posted a variant of that.
|
|
|
|
|
NO the link was no help because the converter converts from a Bitmap to a BitmapImage.
The reason you have to convert is that WPF uses the Bitmap image to take advantage of
the underlying DirectX.
But hanks for the effort.
Sects Therapy
|
|
|
|
|
If you're happy to use GDI+ as an intermediate step, you can get round this with something like:
public static BitmapSource MakeTransparent(this MemoryStream stream)
{
Bitmap bitmap = new Bitmap(stream);
bitmap.MakeTransparent();
return Imaging.CreateBitmapSourceFromHBitmap(
bitmap.GetHBitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions()
);
}
|
|
|
|
|
I saw that solution in a couple of places but was hoping not to get my hands to dirty.
Also I'm afraid of performance issues as I'm trying to put an image in a DataGridView column where the application
is an VS2010 extension here[^] that I'm trying to add functionality. It's not a gotta have but thought it might enhance the
touchy-feely.
Thanks I'll give a shot and see how it works.
[update]
Worked like a charm but there was a gotcha;
1) Had to put it inline because I'm using in a ValueConverter it complained about it not being static then
when I made static it complained something about class needed to be non-generic???
var bitmap = new System.Windows.Media.Imaging.BitmapImage();
MemoryStream stream = new MemoryStream();
img.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
bitmap.StreamSource = stream;
Bitmap bitmap1 = new Bitmap(stream);
bitmap1.MakeTransparent();
return Imaging.CreateBitmapSourceFromHBitmap(
bitmap1.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions()
);
Thanks for the tip.
Sects Therapy
modified on Monday, September 5, 2011 4:27 PM
|
|
|
|
|
Great job there. Glad you have it working.
|
|
|
|
|
hello,
I am new to WPF, and i have the task to navigate between xaml files. the scenario is:
I use an external IDE "Aurora" from mobiform, which has loose xaml files, i want to implement hyperlink to move between different files via xaml
Thanks In Advance
ali
|
|
|
|
|
Navigation Overview[^] explains about browser style navigation that you can use in WPF.
It should be ideal for the scenario you are looking for.
Here[^] is another useful link on the Page Navigation framework.
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
|
|
|
|
|
I have installed the visual web developer 2010 on windows 7 pro 64 bit machine.
In control panel, I can see that this has been installed but I do not see a link to it in All Programs menu and so I do not know how to start it?
Can you suggest a way to solve this issue please?
Thanks
|
|
|
|
|
First of all, this is the wrong forum.
You would do better to post this question in the Visual Studio forum.
Try going to the place where Visual Studio was installed (probably C:\Program Files\Microsoft Visual Studio Express\Common7\IDE) and launch devenv.exe from there.
If you can get to the Visual Studio command prompt, you can launch the IDE from there as well.
Just go to the installation path and then type in Devenv in the window.
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
|
|
|
|
|
|
You are welcome.
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
|
|
|
|
|
This is fairly common. You need to update your service pack. Poll for a windows update and you should have your link.
if you browse to the exe location and double click the exe, you'll get a message telling you to install service pack before you can use the software
|
|
|
|
|
Hi,
I Have one question...
i have parent window and child window..
in parent window i opened child window and in child window am playing selected multiple songs from the list box so i want to apply those selected songs as background music to the parent window ..
how? and what should i do ?
please help me..
thanks in advance.
|
|
|
|
|
Have a look at this article - Multiple Window Interface for WPF[^].
This should give you an idea on how to display multiple windows.
You can play music in WPF using the SoundPlayer class[^].
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
|
|
|
|
|
already am playing multiple songs in child window...i wanna to play those songs in parent window ...
|
|
|
|
|
There are sevral ways you can send complex information from child.
If you use modal mode you can always loog into child while variable is stil accsessible.
if (true)
{
ChildForm frm = new ChildForm();
frm.ShowDialog(this);
MessageBox.Show(frm.StringToGet();
}
You can use static class, so that class does not need to be intilaized and can be accsessd from any Form.
public static class staticClass
{
static staticClass()
{
SomeText = "Intalized in constructior";
}
static ~staticClass(){}
public static String SomeText;
}
if (true)
{
MessageBox.Show(staticClass.SomeText);
ChildForm.ShowDialog();
MessageBox.Show(staticClass.SomeText);
}
And the third option is to pass a reference to a class or to a variable. This one is the most complex. But the static class should be the best option if first option is not enough.
|
|
|
|
|
I need to support multi language for an application. The language sources are stored in separate language files where each word in the files has a unique indexer.
For example: In a label I would like to display the word:
* "pants" when selecting US-English as language
* "trousers" when selecting UK-English as language
The US file looks like this:
1=pants
2=truck
The UK file looks like this:
1=trousers
2=lorry
Notice both file contains the same indexes
I use two buttons to select language:
<Button Click="btnUS_Click" Content="US"></Button>
<Button Click="btnUK_Click" Content="UK"></Button>
With the Click event connected to each button I'm able to read the appropriate language file.
The label I want to display "pants/trousers" is just:
<Label Name="lblWord"></Label>
In the XAML code I would like to give the the label it's unique index (in this case 1). On way is to store it in the Tag property:
<Label Name="lblWord" Tag="1"></Label>
But I'm not sure if this is the best way.
Now for my question, how do I display the correct word in the label depending on the selected language and the stored index for it?
|
|
|
|
|
I would use a custom class that contains a property for the index and another property for the actual word. Something like this:
class LanguageItem
{
public int ID { get; set; }
public string Word { get; set; }
}
Then you could create a property in your viewmodel/codebehind that returns an ObservableCollection<LanguageItem> like this
ObservableCollection<LanguageItem> words = new ObservableCollection<LanguageItem>();
public ObservableCollection<LanguageItem> Words
{
get
{
return words;
}
set
{
if (words != value)
{
words = value;
NotifyPropertyChanged("Words");
}
}
}
You could populate this with with a method that reads and parses your language file appropriately.
Then you can bind your individual controls to the correct LanguageItem's Word like this
<Label Content="{Binding Path=Words[0].Word}"/>
<Label Content="{Binding Path=Words[1].Word}" Grid.Column="1"/>
Hope this helps
Live for today. Plan for tomorrow. Party tonight!
|
|
|
|
|
Where/how is the "NotifyPropertyChanged" defined? I do every thing in a Window class and there is that method not defined
|
|
|
|
|
To bind to a property in your codebehind/viewmodel you need to implement this Interface. Here[^] is the MSDN page for this interface.
Hope this helps
Live for today. Plan for tomorrow. Party tonight!
|
|
|
|
|
Still nothing happens. I must be missing something. Here is the entire code:
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.IO;
namespace SwitchLanguage
{
public partial class MainWindow : Window, INotifyPropertyChanged
{
string folderPath = @"C:\Users\SwitchLanguage\";
ObservableCollection<LanguageItem> words;
public event PropertyChangedEventHandler PropertyChanged;
public MainWindow()
{
InitializeComponent();
PropertyChanged += new PropertyChangedEventHandler(MainWindow_PropertyChanged);
}
private void btnUK_Click(object sender, RoutedEventArgs e)
{
ReadFile("UK.txt");
}
private void btnUS_Click(object sender, RoutedEventArgs e)
{
ReadFile("US.txt");
}
private void ReadFile(string file)
{
if (!File.Exists(folderPath + file))
{
throw new FileNotFoundException("Language file doesn't exist");
}
StreamReader sr = new StreamReader(folderPath + file);
ObservableCollection<LanguageItem> words = new ObservableCollection<LanguageItem>();
while (!sr.EndOfStream)
{
string[] parts = sr.ReadLine().Split('=');
LanguageItem languageItem = new LanguageItem();
languageItem.ID = int.Parse(parts[0]);
languageItem.Word = parts[1];
words.Add(languageItem);
}
Words = words;
sr.Close();
}
public ObservableCollection<LanguageItem> Words
{
get { return words; }
set
{
if (words != value)
{
words = value;
PropertyChanged(this, new PropertyChangedEventArgs("Words"));
}
}
}
void MainWindow_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
Console.WriteLine("");
}
}
public class LanguageItem
{
public int ID { get; set; }
public string Word { get; set; }
}
}
<Window x:Class="SwitchLanguage.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label Name="lblWord" Content="{Binding Path=Words[0].Word}" Margin="50,-100,0,0" Width="200" Height="30"></Label>
<Button Width="100" Height="40" Click="btnUK_Click" Content="UK" Margin="-100,0,0,0"></Button>
<Button Width="100" Height="40" Click="btnUS_Click" Content="US" Margin="100,0,0,0"></Button>
</Grid>
</Window>
|
|
|
|
|
Well, the most obvious thing here is that you haven't set the DataContext of your window to the Window class. To be honest, what you have here is not the way I would have chosen to do it, but if it eventually works for you...
Anyway all you need to do is, after the call to InitializeComponent, add
DataContext = this;
|
|
|
|
|
Thanks! That did the trick
Pete, would you have solve this?
I don't like to use index assigners in the XAML code Words[0].Word, but I don't see any other solution.
In my case I cannot use resource files. Resource file (what I have seen) must be compiled into the application. To use a text file is much easier since I can get as many languages I want if all files follow the correct format.
|
|
|
|
|
We use a database to store the text, and this is bound in at runtime. It's that straightforward.
|
|
|
|
|
Hi Pete,
Just a quick question on this topic. You said that you store you dictionaries in a database, and I can see the value in this, but you also said you bind the values at runtime. Does this mean that you have a property for each and every label, group box header, tab header etc that needs to be localised, and then bind to the property, or do you store your localising (is that a word?) strings in some sort of collection? If it is the former, then this must be a hell of a job, as on some forms, you could have up to 20 - 25 labels etc that need to be localised, and so would need to declare that many properties in your vewmodel, and if it is the latter, how do you bind the labels etc to the collection ? The way I proposed to the OP, i.e using the indexers, I got from one of Sasha Barbers articles WPF:Binding to individual collection items[^], and would appreciate it if you could give me your thought on this, as it does seem a bit of a hack, and could potentially lead to disastrous results if your dictionaries are not in sync.
Thanks for your time.
Wayne.
Live for today. Plan for tomorrow. Party tonight!
|
|
|
|