Как подключить system windows media

I’m using an object from a 3rd party API that has a property of type System.Windows.Media.ImageSource, yet I can’t seem to find the System.Windows.Media namespace anywhere. If I try to add a reference to my project I don’t see System.Windows.Media in the list of options. My project is also targeting .Net 3.5.

Is there something else I need to do to be able to access this namespace?

Herohtar's user avatar

Herohtar

5,3774 gold badges31 silver badges41 bronze badges

asked Jun 30, 2010 at 23:37

Eric Anastas's user avatar

Eric AnastasEric Anastas

21.7k39 gold badges143 silver badges236 bronze badges

1

You should add reference to PresentationCore.dll.

answered Oct 8, 2012 at 5:57

MegaMilivoje's user avatar

MegaMilivojeMegaMilivoje

1,6712 gold badges14 silver badges15 bronze badges

6

The System.Windows.Media.Imaging namespace is part of PresentationCore.dll (if you are using Visual Studio 2008 then the WPF application template will automatically add this reference). Note that this namespace is not a direct wrapping of the WIC library, although a large proportion of the more common uses are still available and it is relatively obvious how these map to the WIC versions. For more information on the classes in this namespace check out

http://msdn2.microsoft.com/en-us/library/system.windows.media.imaging.aspx

Liam's user avatar

Liam

27.9k28 gold badges128 silver badges190 bronze badges

answered Jun 30, 2010 at 23:41

VOX's user avatar

4

Add PresentationCore.dll to your references. This dll url in my pc — C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationCore.dll

Ian R. O'Brien's user avatar

answered Jun 18, 2013 at 9:30

Mamedov's user avatar

MamedovMamedov

4494 silver badges3 bronze badges

For Visual Studio 2017

Find «References» in Solution explorer

Right click «References»

Choose «Add Reference…»

Find «Presentation.Core» list and check checkbox

Click OK

answered May 5, 2018 at 17:09

Mike from PSG's user avatar

3

You can add PresentationCore.dll more conveniently by editing the project file. Add the following code into your csproj file:

<ItemGroup>
   <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

In your solution explorer, you now should see this framework listed, now. With that, you then can also refer to the classes provided by PresentationCore.dll.

answered Feb 27, 2021 at 17:08

Owlbuster's user avatar

OwlbusterOwlbuster

1831 silver badge5 bronze badges

2

I found an answer on CodeProject which worked for me.

Open your project file, the *.csproj file so you can edit it as a text file. If like me you were targeting net6.0 you’ll see something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
    </PropertyGroup>

</Project>

Now, instead of net6.0 you need to target net6.0-windows and you also have to set the UseWpf-flag. Then your *.csproj file should like something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0-windows</TargetFramework>
        <UseWpf>true</UseWpf>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
     </PropertyGroup>

</Project>

answered Jul 12, 2022 at 12:41

Boris Month's user avatar

Boris MonthBoris Month

4216 silver badges14 bronze badges

1

I my case I needed to specify Platforms tag — for some reason it did not work otherwise.

  <PropertyGroup>
    <!-- Must be here for this example, otherwise 'using System.Windows.Media.Media3D' does not work for intellisense -->
    <Platforms>x64</Platforms>
  </PropertyGroup>

Visual studio 2019 v16.9.1.

answered Mar 23, 2021 at 12:36

TarmoPikaro's user avatar

TarmoPikaroTarmoPikaro

4,7732 gold badges50 silver badges62 bronze badges

3 / 3 / 2

Регистрация: 29.03.2013

Сообщений: 133

1

27.08.2014, 18:51. Показов 13383. Ответов 5


Студворк — интернет-сервис помощи студентам

В msdn есть using System.Windows.Media; но у меня такого пространства имен нет. Видел что есть подобные темы, но в них ответа на свой вопрос не нашел.

Как подлючить это пространство имен — ?



0



Butter

Заблокирован

27.08.2014, 18:55

2

В Reference нужно добавить его.

Добавлено через 1 минуту
Поправка его в вин форме нельзя вытяжка и мсдн

Предоставляет типы, обеспечивающие интеграцию самых разнообразных мультимедийных данных (включая изображения, текст, аудио и видео) в приложениях Windows Presentation Foundation (WPF).



0



Vitalyk

Заблокирован

27.08.2014, 19:14

3

Butter,

Поправка его в вин форме нельзя вытяжка и мсдн

Можно.
Даже контролы WPF можно в винформу вставлять — через ElementHost. И наоборот тоже — через WindowsFormsHost.

Действительно, нужно сперва добавить ссылку на библиотеку, может быть PresentationCore.dll, но могу и ошибаться — посмотрите на MSDN, там должно быть.



0



3 / 3 / 2

Регистрация: 29.03.2013

Сообщений: 133

27.08.2014, 19:22

 [ТС]

4

Butter, что-то я не понял. Что надо сделать ?



0



makudzimo

Заблокирован

28.08.2014, 04:30

5

denysd21012011, меню Проект -> Добавить ссылку -> а дальше читайте пост Виталика.



0



Master of Orion

Эксперт .NET

6096 / 4952 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

28.08.2014, 08:07

6

denysd21012011,
1. Заходим на MSDN.
2. Вводим в поиск System.Windows.Media
3. Заходим по первой ссылке и читаем:

Пространство имен: System.Windows.Media
Сборка: PresentationCore (в PresentationCore.dll)

4. Подключаем найденную dll.



1



I’m using an object from a 3rd party API that has a property of type System.Windows.Media.ImageSource, yet I can’t seem to find the System.Windows.Media namespace anywhere. If I try to add a reference to my project I don’t see System.Windows.Media in the list of options. My project is also targeting .Net 3.5.

Is there something else I need to do to be able to access this namespace?

Herohtar's user avatar

Herohtar

5,3774 gold badges31 silver badges41 bronze badges

asked Jun 30, 2010 at 23:37

Eric Anastas's user avatar

Eric AnastasEric Anastas

21.7k39 gold badges143 silver badges236 bronze badges

1

You should add reference to PresentationCore.dll.

answered Oct 8, 2012 at 5:57

MegaMilivoje's user avatar

MegaMilivojeMegaMilivoje

1,6712 gold badges14 silver badges15 bronze badges

6

The System.Windows.Media.Imaging namespace is part of PresentationCore.dll (if you are using Visual Studio 2008 then the WPF application template will automatically add this reference). Note that this namespace is not a direct wrapping of the WIC library, although a large proportion of the more common uses are still available and it is relatively obvious how these map to the WIC versions. For more information on the classes in this namespace check out

http://msdn2.microsoft.com/en-us/library/system.windows.media.imaging.aspx

Liam's user avatar

Liam

27.9k28 gold badges128 silver badges190 bronze badges

answered Jun 30, 2010 at 23:41

VOX's user avatar

4

Add PresentationCore.dll to your references. This dll url in my pc — C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationCore.dll

Ian R. O'Brien's user avatar

answered Jun 18, 2013 at 9:30

Mamedov's user avatar

MamedovMamedov

4494 silver badges3 bronze badges

For Visual Studio 2017

Find «References» in Solution explorer

Right click «References»

Choose «Add Reference…»

Find «Presentation.Core» list and check checkbox

Click OK

answered May 5, 2018 at 17:09

Mike from PSG's user avatar

3

You can add PresentationCore.dll more conveniently by editing the project file. Add the following code into your csproj file:

<ItemGroup>
   <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

In your solution explorer, you now should see this framework listed, now. With that, you then can also refer to the classes provided by PresentationCore.dll.

answered Feb 27, 2021 at 17:08

Owlbuster's user avatar

OwlbusterOwlbuster

1831 silver badge5 bronze badges

2

I found an answer on CodeProject which worked for me.

Open your project file, the *.csproj file so you can edit it as a text file. If like me you were targeting net6.0 you’ll see something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
    </PropertyGroup>

</Project>

Now, instead of net6.0 you need to target net6.0-windows and you also have to set the UseWpf-flag. Then your *.csproj file should like something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0-windows</TargetFramework>
        <UseWpf>true</UseWpf>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
     </PropertyGroup>

</Project>

answered Jul 12, 2022 at 12:41

Boris Month's user avatar

Boris MonthBoris Month

4216 silver badges14 bronze badges

1

I my case I needed to specify Platforms tag — for some reason it did not work otherwise.

  <PropertyGroup>
    <!-- Must be here for this example, otherwise 'using System.Windows.Media.Media3D' does not work for intellisense -->
    <Platforms>x64</Platforms>
  </PropertyGroup>

Visual studio 2019 v16.9.1.

answered Mar 23, 2021 at 12:36

TarmoPikaro's user avatar

TarmoPikaroTarmoPikaro

4,7732 gold badges50 silver badges62 bronze badges

  • Remove From My Forums
  • Question

  • I’m getting a message when I try to import this namespace that «Namespace or type specified in the Imports System.Windows.Media.Imaging doesn’t contain any public member or cannot be found.  Make sure the namespace or the type is defined etc…»  

    I have PresentationCore.dll in my references, and .NET 3.5.1 and I have never had an issue like this.  Should I be using system.drawing, or is that outdated?  Any guidance on this would be helpful.  Thanks!

    using Visual Web Developer 2008 Express and Visual Basic doing ASP .NET dev

Answers

  • I’m getting a message when I try to import this namespace that «Namespace or type specified in the Imports System.Windows.Media.Imaging doesn’t contain any public member or cannot be found.  Make sure the namespace or the type is defined etc…»  

    I have PresentationCore.dll in my references, and .NET 3.5.1 and I have never had an issue like this.  Should I be using system.drawing, or is that outdated?  Any guidance on this would be helpful.  Thanks!

    using Visual Web Developer 2008 Express and Visual Basic doing ASP .NET dev

    Hi bharnett ,

    Welcome to the forums.  :-)    :-D

    If you are doing ASP.Net then please use this forum.>>

    http://forums.asp.net/

    This forum area is for WINDOWS FORMs or CONSOLE applications in Vb.Net.

    However I tried adding a REF to PresentationCore and then had no trouble adding

    Imports System.Windows.Media.Imaging
    in a FORMs based project.  :-)

    There are different classes in that NAMESPACE compared to the System.Drawing.Imaging namespace.

    Try

    1) Backup your projects first.

    2) Restart your computer and re-open VISUAL STUDIO.

    3) If that fails reinstall VISUAL STUDIO.

    Imports System.Drawing.Imaging
    
    Imports System.Windows.Media.Imaging
    
    Public Class Form1
    
    
    End Class

    Regards,

    John

    • Marked as answer by

      Monday, February 1, 2010 2:24 AM

I’m using an object from a 3rd party API that has a property of type System.Windows.Media.ImageSource, yet I can’t seem to find the System.Windows.Media namespace anywhere. If I try to add a reference to my project I don’t see System.Windows.Media in the list of options. My project is also targeting .Net 3.5.

Is there something else I need to do to be able to access this namespace?

Herohtar's user avatar

Herohtar

5,1844 gold badges35 silver badges40 bronze badges

asked Jun 30, 2010 at 23:37

Eric Anastas's user avatar

Eric AnastasEric Anastas

21.4k35 gold badges141 silver badges231 bronze badges

1

You should add reference to PresentationCore.dll.

answered Oct 8, 2012 at 5:57

MegaMilivoje's user avatar

MegaMilivojeMegaMilivoje

1,6251 gold badge13 silver badges15 bronze badges

5

The System.Windows.Media.Imaging namespace is part of PresentationCore.dll (if you are using Visual Studio 2008 then the WPF application template will automatically add this reference). Note that this namespace is not a direct wrapping of the WIC library, although a large proportion of the more common uses are still available and it is relatively obvious how these map to the WIC versions. For more information on the classes in this namespace check out

http://msdn2.microsoft.com/en-us/library/system.windows.media.imaging.aspx

Liam's user avatar

Liam

26.8k27 gold badges122 silver badges185 bronze badges

answered Jun 30, 2010 at 23:41

VOX's user avatar

4

Add PresentationCore.dll to your references. This dll url in my pc — C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5PresentationCore.dll

Ian R. O'Brien's user avatar

answered Jun 18, 2013 at 9:30

Mamedov's user avatar

MamedovMamedov

4294 silver badges3 bronze badges

For Visual Studio 2017

Find «References» in Solution explorer

Right click «References»

Choose «Add Reference…»

Find «Presentation.Core» list and check checkbox

Click OK

answered May 5, 2018 at 17:09

Mike from PSG's user avatar

3

You can add PresentationCore.dll more conveniently by editing the project file. Add the following code into your csproj file:

<ItemGroup>
   <FrameworkReference Include="Microsoft.WindowsDesktop.App" />
</ItemGroup>

In your solution explorer, you now should see this framework listed, now. With that, you then can also refer to the classes provided by PresentationCore.dll.

answered Feb 27, 2021 at 17:08

Owlbuster's user avatar

OwlbusterOwlbuster

1631 silver badge5 bronze badges

2

I found an answer on CodeProject which worked for me.

Open your project file, the *.csproj file so you can edit it as a text file. If like me you were targeting net6.0 you’ll see something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
    </PropertyGroup>

</Project>

Now, instead of net6.0 you need to target net6.0-windows and you also have to set the UseWpf-flag. Then your *.csproj file should like something like this:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>net6.0-windows</TargetFramework>
        <UseWpf>true</UseWpf>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>enable</Nullable>
        <OutputType>WinExe</OutputType>
     </PropertyGroup>

</Project>

answered Jul 12, 2022 at 12:41

Boris Month's user avatar

Boris MonthBoris Month

3914 silver badges14 bronze badges

1

I my case I needed to specify Platforms tag — for some reason it did not work otherwise.

  <PropertyGroup>
    <!-- Must be here for this example, otherwise 'using System.Windows.Media.Media3D' does not work for intellisense -->
    <Platforms>x64</Platforms>
  </PropertyGroup>

Visual studio 2019 v16.9.1.

answered Mar 23, 2021 at 12:36

TarmoPikaro's user avatar

TarmoPikaroTarmoPikaro

4,5972 gold badges46 silver badges57 bronze badges

3 / 3 / 2

Регистрация: 29.03.2013

Сообщений: 133

1

27.08.2014, 18:51. Показов 12481. Ответов 5


В msdn есть using System.Windows.Media; но у меня такого пространства имен нет. Видел что есть подобные темы, но в них ответа на свой вопрос не нашел.

Как подлючить это пространство имен — ?

0

Butter

Заблокирован

27.08.2014, 18:55

2

В Reference нужно добавить его.

Добавлено через 1 минуту
Поправка его в вин форме нельзя вытяжка и мсдн

Предоставляет типы, обеспечивающие интеграцию самых разнообразных мультимедийных данных (включая изображения, текст, аудио и видео) в приложениях Windows Presentation Foundation (WPF).

0

Vitalyk

Заблокирован

27.08.2014, 19:14

3

Butter,

Поправка его в вин форме нельзя вытяжка и мсдн

Можно.
Даже контролы WPF можно в винформу вставлять — через ElementHost. И наоборот тоже — через WindowsFormsHost.

Действительно, нужно сперва добавить ссылку на библиотеку, может быть PresentationCore.dll, но могу и ошибаться — посмотрите на MSDN, там должно быть.

0

3 / 3 / 2

Регистрация: 29.03.2013

Сообщений: 133

27.08.2014, 19:22

 [ТС]

4

Butter, что-то я не понял. Что надо сделать ?

0

makudzimo

Заблокирован

28.08.2014, 04:30

5

denysd21012011, меню Проект -> Добавить ссылку -> а дальше читайте пост Виталика.

0

Master of Orion

Эксперт .NET

6094 / 4950 / 905

Регистрация: 10.07.2011

Сообщений: 14,522

Записей в блоге: 5

28.08.2014, 08:07

6

denysd21012011,
1. Заходим на MSDN.
2. Вводим в поиск System.Windows.Media
3. Заходим по первой ссылке и читаем:

Пространство имен: System.Windows.Media
Сборка: PresentationCore (в PresentationCore.dll)

4. Подключаем найденную dll.

1

  1. Use System.Media.SoundPlayer to Play a Sound in C#
  2. Use the SystemSounds.Play Method to Play a Sound in C#
  3. Embed the Windows Media Player Control in a C# Solution to Play a Sound
  4. Add the Microsoft.VisualBasic Reference on the C# Project to Play a Sound

This tutorial will teach you how to play audio files or sounds in Windows Forms using C#. You can’t deny sound’s importance in immersing the audience in game development or technical applications.

C# programming offers four primary ways to implement audio files or sounds to your Windows applications, each useful and practical in unique ways. With such a rich platform as .NET for multiplayer, you can easily create custom sound generators for WAV or other format files.

Furthermore, it is possible to build a byte-based buffer of the wave files (sound files) directly in memory using C# as the WPF cones with excellent built-in multiplayer (audio) support.

The important thing to understand here is the SoundPlayer class which plays sound based on WAV or wave format which makes it not extremely useful instead, the MediaPlayer and MediaElement classes allow the playback of MP3 files.

The SoundPlayer class can help play a sound at a given path at run time as it requires the file path, name, and a reference to the System.Media namespace.

You can declare a reference to the System.Media namespace and use SoundPlayer _exp = new SoundPlayer(@"path.wav"); without mentioning the namespace at the object’s declaration.

Afterward, execute it using the Play() method with something like _exp.Play();. Most importantly, file operations like playing a sound should be enclosed within appropriate or suitable structured exception handling blocks for increased efficiency and understanding in case something goes wrong; the path name is malformed, read-only sound file path, null path, and invalid audio file path name can lead to errors and require different exception classes.

using System;
using System.Media; // essential namespace for using `SoundPlayer`
using System.Windows.Forms;

namespace play_sound
{
    public partial class Form1 : Form
    {
        // Initialize form components
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // object creation and path selection
            SoundPlayer player = new SoundPlayer(@"C:UsersDELLdark_souls_theme.wav");

            // apply the method to play sound
            player.Play();
        }
    }
}

Output:

Use the SystemSounds.Play Method to Play a Sound in C#

The functionality (SystemSounds class offers) is one of the simplest ways of implementing sound in your C# applications in addition to its ability to offer different system sounds with a single line of code; SystemSounds.Beep.Play();.

However, there are some limitations to using the SystemSounds class as you can only get access to five different system sounds, including; Asterisk, Beep, Exclamation, Hand, and Question, and in case, you disable system sound in Windows, this method will not work, and all the sounds will be replaced with silence.

On the other hand, it makes it extremely easy to play sounds the same way your Windows does, and it’s always a good choice that your C# application respects the user’s choice of silence.

Declare a reference to the System.Media in your C# project or use something like System.Media.SystemSounds.Asterisk.Play(); to play a sound.

using System;
using System.Media; // essential namespace for `SystemSounds`
using System.Windows.Forms;

namespace play_sound
{
    public partial class Form1 : Form
    {
        // initialize components
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            SystemSounds.Asterisk.Play(); // you can use other sounds in the place of `Asterisk`
        }
    }
}

Output:

The Play() method plays the sound asynchronously associated with a set of Windows OS sound-event types. You cannot inherit the SystemSounds class, which provides static methods to access system sounds.

It is a high-level approach that enables C# applications to use different system sounds in typical scenarios that help these applications to seamlessly fit into the Windows environment. It’s possible to customize the sounds in the Sound control panel so that each user profile can override these sounds.

It is possible to add the Windows Media Player control using Microsoft Visual Studio to play a sound in C#. The Windows Media Player is in the VS Toolbox, and to use its functionality in your C# application, first, add its components to your Windows Form.

Install the latest version of Windows Media Player SDK on your system and access it using your VS toolbox by customizing it from the COM components to add the Windows Media Player option. The default name of Windows Media Player in Visual Studio is axWindowsMediaPlayer1, and you can change it to something more rememberable.

Add the Windows Media Player ActiveX control to your C# project and implement it in a button-click event. Furthermore, you can choose two modes: an Independent mode, analogous to the media opened through the Open method, and a Clock mode, a media target corresponding timeline and clock entries in the Timing tree, which controls the playback.

using System;
using System.Windows.Media; // essential namespace
using System.Windows.Forms;

namespace play_sound
{
    public partial class Form1 : Form
    {
        private MediaPlayer audio_player = new MediaPlayer();
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dialog_audio = new OpenFileDialog();
            dialog_audio.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
            if (dialog_audio.ShowDialog() == DialogResult.OK)
            {
                audio_player.Open(new Uri(dialog_audio.FileName));
                audio_player.Play();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // to pause audio
            audio_player.Pause();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            // to resume the paused audio
            audio_player.Play();
        }
    }
}

Output:

Most importantly, the MediaPlayer class inherits Windows Media Player technology to play audio files and system sound in several modern formats. With its help, you can control the playback process of the sound file mentioned in or carried by the MediaPlayer instance.

Add the Microsoft.VisualBasic Reference on the C# Project to Play a Sound

The Audio class is incredibly famous in Visual Basic for playing a sound, and you can benefit from it by using it in C# by including the Visual Basic bindings in your application. However, there is a C#-specific version of the Audio class called the SoundPlayer class, but it does not allow easy byte-based buffer building of the wave directly in memory.

Add the Microsoft.VisualBasic reference to your C# project as an initial step and create an object from the Audio class like static Audio my_obj = new Audio(); and add the sound file address like my_exp.Play("m:\path.wav", AudioPlayMode.WaitToComplete);.

You can customize or set the AudioPlayMode by yourself, which allows you to customize the playback time of the sound.

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic; // essential namespace
using Microsoft.VisualBasic.Devices; // essential namespace

namespace play_sound
{
    public partial class Form1 : Form
    {
        static Audio audio_player = new Audio();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            audio_player.Play(@"C:UsersDELLdark_souls_theme.wav",
            AudioPlayMode.WaitToComplete);
        }
    }
}

Output:

It is a good practice to use the Background or BackgroundLoop tool to resume the other tasks while the audio continues to play in the background.

It is optional; however, you can create custom sounds using nothing more than the C# code by learning the uncompressed WAV file and can create the sound directly in your system’s memory.

This tutorial taught you how to effectively play a sound file in C#.

  • Remove From My Forums
  • Вопрос

  • Всем привет!
    Кто знает, как загрузить эту сборку —
    не могу ее найти.

Ответы

  • Сорри!
    Уже нашел — она в PresentationCore

    • Помечено в качестве ответа
      QazRdx
      23 мая 2018 г. 5:43
  • Это не сборка а пространство имен, часть WPF. Находится в
    PresentationCore.dll. Если вы пытаетесь задействовать ее из не-WPF приложения, скорее всего вы делаете что-то не то, так как классы из него вряд ли будут вам полезны.

    • Помечено в качестве ответа
      QazRdx
      23 мая 2018 г. 7:18

Все ответы

  • Сорри!
    Уже нашел — она в PresentationCore

    • Помечено в качестве ответа
      QazRdx
      23 мая 2018 г. 5:43
  • Это не сборка а пространство имен, часть WPF. Находится в
    PresentationCore.dll. Если вы пытаетесь задействовать ее из не-WPF приложения, скорее всего вы делаете что-то не то, так как классы из него вряд ли будут вам полезны.

    • Помечено в качестве ответа
      QazRdx
      23 мая 2018 г. 7:18
  • Спасибо!
    Разбираюсь.
    У меня проект WinForm,
    Но один из классов, который я адаптирую,
    требует этот namespace.
    Ссылку на него установил — ошибки, вроде, пропали.
    Будем посмотреть.

Аудио и Видео:

Воспроизведение аудио

WPF поставляется с превосходной встроенной поддержкой аудио и видео, как вы увидите в следующей паре глав этого руководства. В этой статье мы обсудим возможность воспроизведения звука, исходящего из аудиофайлов, например в формате MP3. Но сначала давайте рассмотрим пару более простых подходов.

Системные звуки и класс SoundPlayer

WPF имеет класс под названием SoundPlayer, который будет воспроизводить для вас аудиоконтент на основе формата WAV. WAV не очень широко используется сегодня, главным образом потому, что он несжатый и, следовательно, занимает много места.

Поэтому, хотя класс SoundPlayer прост в использовании, это не очень полезно. Вместо этого мы будем фокусироваться на классах MediaPlayer и MediaElement, что позволяют воспроизводить файлы формата MP3, но сначала давайте посмотрим на самый простой способ воспроизведения звука в вашем приложении WPF — класс SystemSounds.

Класс SystemSounds предлагает несколько разных звуков, которые соответствуют звуку, определенному для этого события пользователем в Windows, например, Восклицание и
Вопросу. Вы можете использовать эти звуки и настройки и воспроизводить их с помощью одной строки кода:

SystemSounds.Beep.Play();

Ниже — полный пример, в котором мы используем все доступные на данный момент звуки:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.SystemSoundsSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SystemSoundsSample" Height="200" Width="150">
    <StackPanel Margin="10" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button Name="btnAsterisk" Click="btnAsterisk_Click">Asterisk</Button>
        <Button Name="btnBeep" Margin="0,5" Click="btnBeep_Click">Beep</Button>
        <Button Name="btnExclamation" Click="btnExclamation_Click">Exclamation</Button>
        <Button Name="btnHand" Margin="0,5" Click="btnHand_Click">Hand</Button>
        <Button Name="btnQuestion" Click="btnQuestion_Click">Question</Button>
    </StackPanel>
</Window>
using System;
using System.Media;
using System.Windows;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class SystemSoundsSample : Window
	{
		public SystemSoundsSample()
		{
			InitializeComponent();
		}

		private void btnAsterisk_Click(object sender, RoutedEventArgs e)
		{
			SystemSounds.Asterisk.Play();
		}

		private void btnBeep_Click(object sender, RoutedEventArgs e)
		{
			SystemSounds.Beep.Play();
		}

		private void btnExclamation_Click(object sender, RoutedEventArgs e)
		{
			SystemSounds.Exclamation.Play();
		}

		private void btnHand_Click(object sender, RoutedEventArgs e)
		{
			SystemSounds.Hand.Play();
		}

		private void btnQuestion_Click(object sender, RoutedEventArgs e)
		{
			SystemSounds.Question.Play();
		}
	}
}

Конечно, есть несколько ограничений в использовании этого подхода. Прежде всего, вы получаете доступ только к этим пяти звукам, и, во-вторых, пользователь может отключить их в Windows, и в этом случае ожидаемый звук будет заменен тишиной. С другой стороны, если вы только хотите использовать эти звуки, так же, как это делает Windows, это позволит вам очень просто производить звук для предупреждений, вопросов и т. д. В этом случае это хороший выбор для обработки действий пользователя по умолчанию.

Класс MediaPlayer

Класс MediaPlayer использует технологию Windows Media Player для воспроизведения как аудио так и видео в нескольких современных форматах, например MP3 и MPEG. В этой статье, мы будем использовать его для воспроизведения только аудио, а в следующей статье сосредоточимся на видео.

Воспроизведение MP3-файла классом MediaPlayer очень просто, как мы увидим в следующем примере:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.MediaPlayerAudioSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MediaPlayerAudioSample" Height="100" Width="200">
    <Grid VerticalAlignment="Center" HorizontalAlignment="Center">
        <Button Name="btnOpenAudioFile" Click="btnOpenAudioFile_Click">Open Audio file</Button>
    </Grid>
</Window>
using System;
using System.Windows;
using System.Windows.Media;
using Microsoft.Win32;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class MediaPlayerAudioSample : Window
	{
		private MediaPlayer mediaPlayer = new MediaPlayer();

		public MediaPlayerAudioSample()
		{
			InitializeComponent();
		}

		private void btnOpenAudioFile_Click(object sender, RoutedEventArgs e)
		{
			OpenFileDialog openFileDialog = new OpenFileDialog();
			openFileDialog.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
			if(openFileDialog.ShowDialog() == true)
			{
				mediaPlayer.Open(new Uri(openFileDialog.FileName));
				mediaPlayer.Play();
			}
		}
	}
}

В этом примере мы создаем простую кнопку, которая будет открывать диалоговое окно, где можно будет выбрать MP3 файл. Когда файл выбран, он будет использоваться в уже созданном MediaPlayer объекте для его открытия и воспроизведения. Обратите внимание, что MediaPlayer объект создается вне обработчика событий. Это позволяет нам быть уверенными, что объект не будет преждевременно собран сборщиком мусора, так как находится вне области видимости. Когда обработчик событий завершает работу, это приводит к остановке воспроизведения.

Также обратите внимание, что для этого примера не выполняется обработка исключений, как обычно, чтобы сделать пример максимально компактным, но и также потому, что методы Open() и Play() фактически не создают исключений. Вместо этого можно использовать события MediaOpened и MediaFailed, чтобы определить, когда идет все правильно или неправильно.

Управление MediaPlayer

В нашем первом примере MediaPlayer мы просто открыли и автоматически начали воспроизведение файла, не давая пользователю возможности контролировать процесс воспроизведения, но, разумеется, элемент управления MediaPlayer предлагает вам полный контроль над воспроизведением. Вот пример, показывающий наиболее важные функции:

<Window x:Class="WpfTutorialSamples.Audio_and_Video.MediaPlayerAudioControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MediaPlayerAudioControlSample" Height="120" Width="300">
    <StackPanel Margin="10">
        <Label Name="lblStatus" Content="Not playing..." HorizontalContentAlignment="Center" Margin="5" />
        <WrapPanel HorizontalAlignment="Center">
            <Button Name="btnPlay" Click="btnPlay_Click">Play</Button>
            <Button Name="btnPause" Margin="5,0" Click="btnPause_Click">Pause</Button>
            <Button Name="btnStop" Click="btnStop_Click">Stop</Button>
        </WrapPanel>
    </StackPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
using Microsoft.Win32;

namespace WpfTutorialSamples.Audio_and_Video
{
	public partial class MediaPlayerAudioControlSample : Window
	{
		private MediaPlayer mediaPlayer = new MediaPlayer();

		public MediaPlayerAudioControlSample()
		{
			InitializeComponent();

			OpenFileDialog openFileDialog = new OpenFileDialog();
			openFileDialog.Filter = "MP3 files (*.mp3)|*.mp3|All files (*.*)|*.*";
			if(openFileDialog.ShowDialog() == true)
				mediaPlayer.Open(new Uri(openFileDialog.FileName));

			DispatcherTimer timer = new DispatcherTimer();
			timer.Interval = TimeSpan.FromSeconds(1);
			timer.Tick += timer_Tick;
			timer.Start();
		}

		void timer_Tick(object sender, EventArgs e)
		{
			if(mediaPlayer.Source != null)
				lblStatus.Content = String.Format("{0} / {1}", mediaPlayer.Position.ToString(@"mm:ss"), mediaPlayer.NaturalDuration.TimeSpan.ToString(@"mm:ss"));
			else
				lblStatus.Content = "No file selected...";
		}

		private void btnPlay_Click(object sender, RoutedEventArgs e)
		{
			mediaPlayer.Play();
		}

		private void btnPause_Click(object sender, RoutedEventArgs e)
		{
			mediaPlayer.Pause();
		}

		private void btnStop_Click(object sender, RoutedEventArgs e)
		{
			mediaPlayer.Stop();
		}
	}
}

В этом примере мы немного расширили проигрыватель, теперь он содержит кнопку воспроизведения, паузы и остановки, а также метку для отображения текущего состояния воспроизведения. Файл mp3 загружается точно так же, но мы делаем это, как только приложение запускается, чтобы упростить пример.

Сразу после загрузки MP3 мы запускаем таймер, который тикает каждую секунду. Мы используем это событие для обновления метки состояния, который будет показывать текущий прогресс, а также всю длину загруженного файла.

Каждая из трех кнопок просто вызывает соответствующий метод объекта MediaPlayer-Play, Pause и Stop.

Заключение

Есть еще несколько вариантов, которые вы можете позволить своему пользователю контролировать, но я хочу оставить их на потом, когда мы будем говорить о видео-аспектах класса MediaPlayer и тогда я сделаю более полный пример медиаплеера, способного воспроизводить как аудио, так и видео файлы, с большим количеством опций.

This article has been fully translated into the following languages:

  • Chinese

  • French

  • German

  • Hungarian

  • Italian

  • Polish

  • Portuguese

  • Russian

  • Spanish

  • Vietnamese

Is your preferred language not on the list? Click here to help us translate this article into your language!


Файлы отделенного кода

Последнее обновление: 15.01.2016

При создании нового проекта WPF в дополнение к создаваемому файлу MainWindow.xaml создается также файл отделенного кода MainWindow.xaml.cs,
где, как предполагается, должна находится логика приложения связанная с разметкой из MainWindow.xaml. Файлы XAML позволяют нам определить
интерфейс окна, но для создания логики приложения, например, для определения обработчиков событий элементов управления,
нам все равно придется воспользоваться кодом C#.

По умолчанию в разметке окна используется атрибут x:Class:

<Window x:Class="XamlApp.MainWindow" 
.......

Атрибут x:Class указывает на класс, который будет представлять данное окно и в который будет компилироваться код в XAML
при компиляции. То есть во время компиляции будет генерироваться класс XamlApp.MainWindow,
унаследованный от класса System.Windows.Window.

Кроме того в файле отделенного кода MainWindow.xaml.cs, который Visual Studio создает автоматически, мы также можем найти класс с тем же именем —
в данном случае класс XamlApp.MainWindow. По умолчанию он имеет некоторый код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;

namespace XamlApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

По сути пустой класс, но этот класс уже выполняет некоторую работу. Во время компиляции этот класс объединяется с классом, сгенерированном из кода XAML.
Чтобы такое слияние классов во время компиляции произошло, класс XamlApp.MainWindow определяется как частичный с модификатором partial.
А через метод InitializeComponent() класс MainWindow вызывает скомпилированный ранее код XAML, разбирает его и по нему строит графический интерфейс окна.

Взаимодействие кода C# и XAML

В приложении часто требуется обратиться к какому-нибудь элементу управления. Для этого надо установить у элемента в XAML свойство Name.

Еще одной точкой взаимодействия между xaml и C# являются события. С помощью атрибутов в XAML мы можем задать события, которые будут связанны с
обработчиками в коде C#.

Итак, создадим новый проект WPF, который назовем XamlApp. В разметке главного окна определим два элемента: кнопку и текстовое поле.

<Window x:Class="XamlApp.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:XamlApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="grid1">
        <TextBox x:Name="textBox1" Width="150" Height="30" VerticalAlignment="Top" Margin="20" />
        <Button x:Name="button1"  Width="100" Height="30" Content="Кнопка" Click="Button_Click" />
    </Grid>
</Window>

И изменим файл отделенного кода, добавив в него обработчик нажатия кнопки:

using System.Windows;

namespace XamlApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            string text = textBox1.Text;
            if (text != "")
            {
                MessageBox.Show(text);
            }
        }
    }
}

Определив имена элементов в XAML, затем мы можем к ним обращаться в коде c#: string text = textBox1.Text.

При определении имен в XAML надо учитывать, что оба пространства имен «http://schemas.microsoft.com/winfx/2006/xaml/presentation» и
«http://schemas.microsoft.com/winfx/2006/xaml» определяют атрибут Name, который устанавливает имя элемента. Во втором случае
атрибут используется с префиксом x: x:Name. Какое именно пространство имен использовать в данном случае, не столь важно,
а следующие определения имени x:Name="button1" и Name="button1" фактически будут равноценны.

В обработчике нажатия кнопки просто выводится сообщение , введенное в текстовое поле. После определения обработчика мы его можем связать с
событием нажатия кнопки в xaml через атрибут Click: Click="Button_Click". В результате после нажатия на кнопку
мы увидим в окне введенное в текстовое поле сообщение.

XAML в WPF

Создание элементов в коде C#

Еще одну форму взаимодействия C# и XAML представляет создание визуальных элементов в коде C#. Например, изменим код xaml следующим образом:

<Window x:Class="XamlApp.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:XamlApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid x:Name="layoutGrid">

    </Grid>
</Window>

Здесь для элемента Grid установлено свойство x:Name, через которое мы можем к нему обращаться в коде. И также изменим код C#:

using System.Windows;
using System.Windows.Controls;

namespace XamlApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Button myButton = new Button();
            myButton.Width = 100;
            myButton.Height = 30;
            myButton.Content = "Кнопка";
            layoutGrid.Children.Add(myButton);
        }
    }
}

В конструкторе странцы создается элемент Button и добавляется в Grid. И если мы запустим приложение, то увидим добавленную кнопку:

XAML в WPF

Posted by: Zeeshan Amjad | September 18, 2009

This abstract class is defined in System.Windows.Media namespace and responsible for all visual type. In other words, whatever display on the screen is inherited from Visual class or its cousin Visual3D class. This class gives the support of hit test, transformation, clipping and bounding box calculation. It is important to note that this class doesn’t provide any high level functionality of WPF such as data binding, lay out, style and event handling. Here is a class diagram of Visual class.

wpf_12

Although this is an abstract class, but just like the DispatcherObject class, none of its function is defined abstract. It means if you simply inherit class from Visual then you can create its instance without overriding any method. Here is a sample code to demonstrate this.

  1: using System;
  2: using System.Windows;
  3: using System.Windows.Media;
  4: 
  5: public class MyVisual : Visual
  6: {
  7: }
  8: 
  9: public class wpf10
 10: {
 11:     [STAThread]
 12:     public static void Main()
 13:     {
 14:         Window win = new Window();
 15:         win.Title = "Visual Class";
 16:         win.Width = 300;
 17:         win.Height = 200;
 18: 
 19:         MyVisual v = new MyVisual();
 20:         win.Content = v;
 21: 
 22:         Application app = new Application();
 23:         app.Run(win);
 24:     }
 25: }
 26: 

Here note that we have to include one more namespace System.Windows.Media because Visual class is defined in this namespace.

The output of this program display “MyVisual” inside the window. This is because frame work calls the ToString function if class is not inherited from UIElement class (next class in the class hierarchy chain). Frameworks call OnRender functions for all the classes that are derived from UIElement and ToString otherwise. If we call the ToString function on the instance of “MyVisual” class then we will get the string “MyVisual”. Here is the output of this program.

wpf_13

If we override the ToString function in MyVisual class and return something else then we will see the same string in the output window. Here is an example to demonstrate this.

  1: using System;
  2: using System.Windows;
  3: using System.Windows.Media;
  4: 
  5: public class MyVisual : Visual
  6: {
  7:     public override String ToString()
  8:     {
  9:         return String.Format("This is my Visual class");
 10:     }
 11: }
 12: 
 13: public class wpf11
 14: {
 15:     [STAThread]
 16:     public static void Main()
 17:     {
 18:         Window win = new Window();
 19:         win.Title = "Visual Class";
 20:         win.Width = 300;
 21:         win.Height = 200;
 22: 
 23:         MyVisual v = new MyVisual();
 24:         win.Content = v;
 25: 
 26:         Application app = new Application();
 27:         app.Run(win);
 28:     }
 29: }
 30: 

Here is the output of this program.

wpf_14

On the other hand, if we create the object of UIElement class (next class in the hierarchy chain) then frame work will call OnRender function instead of ToString. Here is a sample program to demonstrate this concept.

  1: using System;
  2: using System.Windows;
  3: 
  4: public class wpf12
  5: {
  6:     [STAThread]
  7:     public static void Main()
  8:     {
  9:         Window win = new Window();
 10:         win.Title = "UIElement Class";
 11:         win.Width = 300;
 12:         win.Height = 200;
 13: 
 14:         UIElement uie = new UIElement();
 15:         win.Content = uie;
 16: 
 17:         Application app = new Application();
 18:         app.Run(win);
 19:     }
 20: }
 21: 

Output of this program is a blank window with a caption “UIElement Class”. Also note that we do not have to use the name space System.Windows.Media because UIElement class is defined in System.Windows namespace. We are going to explore more about UIElement class in the coming sections.

Its cousin Visual3D class is providing almost the same functionality that Visual class gives. The main difference is it provides services for 3D objects. Visual3D class diagram is simpler than Visual. Here is a class hierarchy of Visual3D class.

wpf_15

Visual class is an interface between managed and unmanaged code. It calls the unmanaged DirectX code using milcore.dll. It can be demonstrated with the following diagram.

wpf_16

  • Как подключить ssd диск для windows 10
  • Как подключить samsung ml 1210 к windows 10
  • Как подключить imac как монитор к windows
  • Как подключить redmi airdots 2 к компьютеру windows 10
  • Как подключить ethernet кабель к компьютеру windows 10